2009-09-15 14 views
6

Utilizzando il metodo Bind() di Asp.net, come si esegue il binding all'oggetto stesso, non a una delle sue proprietà?Collegamento all'oggetto stesso, non a una delle sue proprietà

+1

Si prega di specificare con maggiore chiarezza che cosa esattamente si desidera associare. Per un controllo List ... ?? – Juri

+0

Sono vincolante per un oggetto in un controllo FromView. Dentro il FormView ho un UserControl che definisce una proprietà che è del tipo vincolato. Ad esempio, immaginare una classe denominata Nome che definisce due proprietà, FirstName e LastName. Un'istanza della classe Name è associata a FormView. Non voglio passare FirstName o LastName al mio UserControl chiamando Bind ("FirstName") e Bind ("LastName"), voglio passare l'istanza Name stessa al mio UserControl. – Ryan

risposta

2

Ho finito per aggirare questo problema aggiungendo una proprietà denominata SelfReference che restituisce semplicemente this. Se qualcuno legge questo e ha una soluzione migliore, mi piacerebbe sentirlo.

1

Non sono sicuro di cosa esattamente si voglia legare. L'unica cosa che avrebbe senso per me al momento è quella di legare a un controllo dell'interfaccia utente, ad esempio un controllo DropDown per esempio.

Di solito alcune proprietà di testo per il valore visualizzato e proprietà di valore per il valore effettivo per funzionare come identificatore. Sulla discesa

  • DataTextField
  • DataValueField

Ci si specifica DataTextField = "Firstname" e DataValueField = "Id" dato che si dispone di un oggetto che ha proprietà "Nome" e "ID".

Nelle liste è possibile utilizzare la funzione Eval direttamente sul proprio codice ASPX o aggiungere controlli sul lato server (cioè letterali, etichette) all'interno dei modelli di lista e implementare l'evento ItemDataBound (prendendo come esempio il ripetitore). Here's un buon esempio che illustra ulteriormente questo.

Spero di essere stato in grado di aiutare un po ';)

2

Credo che quello che Ryan significa qui, come se si dispone di un oggetto come questo

public class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

E se si associa Person oggetto ovunque in GridView o Ripetitore su qualsiasi DataSource si associa solo Persona e ottiene un valore di bind predefinito da una delle sue proprietà. supporto abbiamo una variabile di tipo Ryan da Person in modo che io voglio ottenere il valore della variabile di chiamare <%# Eval("Ryan") %> non <%# Eval("Ryan.FirstName") %>

ho provato a mettere un attributo DefaultBindingProperty per la classe, ma non funziona

[System.ComponentModel.DefaultBindingProperty("FirstName")] 
public class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

Così fa qualcuno sa come farlo correttamente?

+0

Sì. Voglio legare l'oggetto, non una delle sue proprietà. – Ryan

0

Ho trovato un modo in qualche modo. In realtà è in "http://msdn.microsoft.com/en-us/library/ms752347.aspx"

ListBox ItemsSource="{**Binding**}" IsSynchronizedWithCurrentItem="true"/> 

Si noti che anche se abbiamo sottolineato che il percorso per il valore da utilizzare è uno dei quattro componenti necessarie di un legame, negli scenari che si desidera associare a un intero oggetto, il valore da utilizzare sarebbe uguale all'oggetto di origine dell'associazione. In questi casi, è applicabile a non specificare un percorso. Si consideri il seguente esempio:

XAML Copia

1

È possibile utilizzare Container.DataItem invece: Item='<%# Container.DataItem %>'

Problemi correlati