Silverlight - Связывание с ObservableCollections - PullRequest
1 голос
/ 03 апреля 2009

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 03 апреля 2009

Вам не нужно указывать 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 голосов
/ 03 апреля 2009

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

C #

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

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

1008 * XAML *

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