2015-05-09 95 views
0

我在我的視圖模型中有一個可觀察的集合,如下所示。WPF - BindingExpression路徑錯誤

  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屬性不存在於可觀察集合中?

+0

將屬性'Name'改爲別的東西,比如'DName'並嘗試... –

回答

1

您會收到該錯誤消息,因爲屬性路徑DataContext.MyData.Name解決了MyData中的Name屬性,該屬性不存在且沒有意義。

您應該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> 
+0

謝謝!它現在有效 –

相關問題