WPF - BindingExpression 路径错误
WPF - BindingExpression path error
我的视图模型中有一个可观察的集合,如下所示。
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 path error: 'Name' property not found on 'object'
''ObservableCollection`1' (HashCode=22227061)'.
BindingExpression:Path=DataContext.MyData.Name; DataItem='MyView'
(Name=''); target element is 'ComboBox' (Name=''); target property is
'ItemsSource' (type 'IEnumerable')
我觉得这很奇怪。为什么说 Name 属性 不在可观察集合中?
您收到该错误消息是因为 属性 路径 DataContext.MyData.Name
解析 MyData
中的 Name
属性,它不存在且不存在'没道理。
您应该将 ItemsSource
属性 绑定到项目集合,并将 DisplayMemberPath
设置为项目 [=25] 的 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>
我的视图模型中有一个可观察的集合,如下所示。
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 path error: 'Name' property not found on 'object' ''ObservableCollection`1' (HashCode=22227061)'. BindingExpression:Path=DataContext.MyData.Name; DataItem='MyView' (Name=''); target element is 'ComboBox' (Name=''); target property is 'ItemsSource' (type 'IEnumerable')
我觉得这很奇怪。为什么说 Name 属性 不在可观察集合中?
您收到该错误消息是因为 属性 路径 DataContext.MyData.Name
解析 MyData
中的 Name
属性,它不存在且不存在'没道理。
您应该将 ItemsSource
属性 绑定到项目集合,并将 DisplayMemberPath
设置为项目 [=25] 的 Name
属性 =]:
<ComboBox ItemsSource="{Binding DataContext.MyData,
RelativeSource={RelativeSource FindAncestor,
AncestorType=UserControl}}"
DisplayMemberPath="Name"/>
或者,您可以创建一个绑定到 Name
属性:
<ComboBox ItemsSource="{Binding DataContext.MyData,
RelativeSource={RelativeSource FindAncestor,
AncestorType=UserControl}}"/>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>