毫无疑问这是一个新问题,但我找到了一个无济于事的答案。我的设置很简单:我在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的对象,而不是被强制绑定到其子属性之一。
答案 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>