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>