2009-09-15 9 views
6

Korzystając z metody Bind() w Asp.net, jak powiązać z samym obiektem, a nie z jego właściwościami?Powiąż z samym obiektem, nie jedną z jego właściwości.

+1

Proszę określić jaśniej, co dokładnie chcesz związać. Do kontroli listy ...? – Juri

+0

Łączę się z obiektem w formancie FromView. Wewnątrz FormView mam UserControl, który definiuje właściwość, która jest typu związanego. Na przykład wyobraź sobie klasę o nazwie Nazwa, która definiuje dwie właściwości: Imię i Nazwisko. Instancja klasy Name jest powiązana z FormView. Nie chcę przekazać FirstName lub LastName do mojego UserControl przez wywołanie Bind ("FirstName") i Bind ("LastName"), chcę przekazać instancję Name do mojego UserControl. – Ryan

Odpowiedz

2

Skończyłem pracować nad tym poprzez dodanie właściwości o nazwie SelfReference, która po prostu zwraca this. Jeśli ktokolwiek to czyta i ma lepsze rozwiązanie, chciałbym to usłyszeć.

1

Nie jestem pewien, co dokładnie chcesz powiązać. W tej chwili jedyną rzeczą, która miałaby dla mnie sens, jest powiązanie z pewną kontrolą interfejsu użytkownika, na przykład kontrola DropDown.

Zwykle niektóre właściwości tekstu dla wyświetlanej wartości i właściwości wartości dla rzeczywistej wartości, która ma funkcjonować jako identyfikator. Z rozwijanej

  • DataTextField
  • DataValueField

Nie można określić DataTextField = "Firstname" i DataValueField = "Id" zważywszy, że masz obiekt, który ma właściwości "Imię" i "ID".

Na listach można użyć funkcji Eval bezpośrednio na kodzie ASPX lub dodawania formantów po stronie serwera (tj literałów, etykiety) wewnątrz szablonów lista i wdrożyć zdarzenie ItemDataBound (biorąc repeatera jako przykład). Here's dobry przykład, który ilustruje to dalej.

nadzieję, że był w stanie pomóc trochę;)

2

myślę co Ryan oznacza tutaj jak gdyby trzeba przedmiot podobny do tego

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

A jeśli wiążą Person obiekt do dowolnego miejsca w GridView lub Repeater do dowolnego źródła danych, które wiążesz tylko osobę i otrzymuje domyślną wartość wiązania z jednej z jego właściwości. wsparcie mamy zmienną Ryan z Person typ tak chcę, aby uzyskać wartość zmiennej z wywołaniem <%# Eval("Ryan") %> nie <%# Eval("Ryan.FirstName") %>

próbowałem umieścić atrybut DefaultBindingProperty dla danej klasy, ale to nie działa

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

tak nie czy ktoś wie, jak to zrobić właściwie?

+0

Tak. Chcę związać obiekt, a nie jedną z jego właściwości. – Ryan

0

Wymyśliłem jakoś sposób. Właściwie to w „http://msdn.microsoft.com/en-us/library/ms752347.aspx

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

Należy zauważyć, że chociaż mamy podkreślił, że droga do wartości do wykorzystania jest jednym z czterech niezbędnych składników wiążącej, w scenariuszach, które chcesz związać się z całą obiekt, wartość do użycia będzie taka sama jak obiekt źródłowy wiążący. W takich przypadkach nie można określić ścieżki. Rozważmy następujący przykład:

XAML Kopiowanie

1

Można użyć Container.DataItem zamiast: Item='<%# Container.DataItem %>'

Powiązane problemy