Silverlight - 使用ObservableCollections进行绑定

时间:2009-04-03 02:53:00

标签: c# silverlight data-binding xaml

毫无疑问这是一个新问题,但我找到了一个无济于事的答案。我的设置很简单:我在XAML中定义了一个ListBox控件,在同一个类中有一个ObservableCollection<MyClass>。我将ObservableCollection<MyClass>绑定到ListBox。

在XAML中此ListBox的层次结构中,我想绑定到给定的MyClass对象,而不是MyClass对象的子属性。

为了澄清,我的XAML看起来如下(我在代码中绑定了ObservableCollection):

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

当然,有一种方法可以获取ObservableCollection的对象,而不是被强制绑定到其子属性之一。

2 个答案:

答案 0 :(得分:3)

如果要使用绑定对象本身,则不必指定Path

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

BTW:您可以使用控件的DataContext属性将控件绑定到对象,而不是您的自定义属性:

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

答案 1 :(得分:0)

除了在XAML中指定绑定路径之外,还必须将集合绑定到ListBox。

C#

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

除非您在MyClass上覆盖了ToString方法,否则您使用的XAML将不会特别有用。即使你说你不是,你确定它不是你想绑定的MyClass的属性吗?我不明白你为什么要直接绑定到集合对象。

XAML

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