2009-04-03 4 views
1

Это, несомненно, новичок, но я искал ответ безрезультатно. Моя настройка проста: у меня есть элемент управления ListBox, определенный в XAML и ObservableCollection<MyClass> в том же классе. Я связываю ObservableCollection<MyClass> с ListBox.Silverlight - привязка с ObservableCollections

В иерархии этого ListBox в XAML я хочу привязываться к данному объекту MyClass, а не к дочернему свойству объекта MyClass.

Чтобы уточнить, у меня есть код XAML, который выглядит следующим образом (я связать ObservableCollection в коде):

<ListBox x:Name="MyListBox"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <MyControls:SpecialControl MyClassObj="{Binding !!!}" /> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
    </ListBox> 

Конечно есть способ получить на объекте с ObservableCollection, а не вынуждены связывать к одному из его дочерних свойств.

ответ

3

Вам не нужно указывать Path, если вы хотите использовать сам связанный объект:

<ListBox x:Name="MyListBox"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <MyControls:SpecialControl MyClassObj="{Binding}" /> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

КСТАТИ: Вместо вашего пользовательского свойства, вы можете использовать DataContext свойство элемента управления, чтобы связать элемент управления к объекту:

<ListBox x:Name="MyListBox"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <MyControls:SpecialControl DataContext="{Binding}" /> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

Спасибо! Кажется, вы читали мои мысли, также предлагая мне напрямую привязываться к DataContext. Это никогда не приходило мне в голову, но это именно то, что я хочу сделать. – JubJub

0

а также указав путь привязки в вашем XAML вы должны связать свою коллекцию в ListBox.

C#

ObservableCollection<MyClass> myCollection = new ObservableCollection<MyClass>(); 
MyListBox.DataContext = myCollection; 

Часть XAML вы использовали не будет особенно полезно, если вы не переопределен метод ToString на MyClass. Даже если вы говорите, что нет, вы уверены, что это не свойство MyClass, к которому вы хотите привязать? Я не понимаю, почему вы хотите связать напрямую с объектом коллекции.

XAML

<ListBox x:Name="MyListBox"> 
    <ListBox.ItemTemplate>  
     <DataTemplate>  
      <MyControls:SpecialControl MyClassObj="{Binding Path=MyClassProperty}" />  
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

Функция SpecialControl должна связывать свойства объекта с некоторыми его дочерними элементами. Возможно, я делаю это неправильно, но я не вижу лучшего метода, если я хочу, чтобы SpecialControl был автономным. – JubJub

+0

это не имеет никакого смысла для меня. Как MyClassProperty связывает xaml с кодом C#? – xarzu