WPF - BindingExpression路径错误

时间:2015-05-09 05:25:38

标签: wpf binding

我的视图模型中有一个可观察的集合,如下所示。

           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属性?

1 个答案:

答案 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>