我的视图模型中有一个可观察的集合,如下所示。
private ObservableCollection<MyClass> _myData;
public ObservableCollection<MyClass> MyData
{
set { _myData=value; }
get { return _myData }
}
MyClas的结构如下所示。
class MyClass
{
private string name;
public string Name;
{
set { name=value;}
get { return name;}
}
}
在我看来,我把上面的可观察集合绑定到了一个组合框。
<ComboBox Width="200"
ItemsSource="{Binding DataContext.MyData.Name,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/>
仍然说
BindingExpression路径错误:'对象'上找不到'名称'属性 ''ObservableCollection`1'(HashCode = 22227061)'。 BindingExpression:路径= DataContext.MyData.Name;的DataItem = 'MyView的' (名称= ''); target元素是'ComboBox'(Name ='');目标属性是 'ItemsSource'(输入'IEnumerable')
我发现这很奇怪。为什么在可观察集合中不存在Name属性?
答案 0 :(得分:1)
您收到该错误消息,因为属性路径DataContext.MyData.Name
解析了Name
中的MyData
属性,该属性不存在且没有意义。
您应该将ItemsSource
属性绑定到项集合,并将DisplayMemberPath
设置为项类的Name
属性:
<ComboBox ItemsSource="{Binding DataContext.MyData,
RelativeSource={RelativeSource FindAncestor,
AncestorType=UserControl}}"
DisplayMemberPath="Name"/>
或者,您可以创建一个绑定到Name
属性的DataTemplate:
<ComboBox ItemsSource="{Binding DataContext.MyData,
RelativeSource={RelativeSource FindAncestor,
AncestorType=UserControl}}"/>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>