数据上下文中的数据绑定

时间:2013-10-04 21:24:12

标签: c# xaml data-binding

我对数据绑定有点新意,并对如何在数据上下文中正确访问“子”对象提出疑问。在我的代码中,我有一个简单的视图模型对象:

class MyViewModel
{
    public Dictionary<int, string> seriesChoices = new Dictionary<int, string>();
    ...
}

在主窗口中,如果我将视图的数据上下文直接设置为字典,我可以使数据绑定工作:

ViewModel selectValues = new ViewModel(); 
MyView.DataContext = selectValues.seriesChoices;

....(relevant XAML)

<ComboBox x:Name="ComboBox1" 
              ItemsSource="{Binding}"
              SelectedValuePath="Key"
              DisplayMemberPath="Value"
              />

我想要做的是直接将DataContext设置为ViewModel对象,然后指定底层对象,但我似乎无法使其工作。这是我尝试过的最新事情:

MyView.DataContext = selectValues

....(relevant XAML)

<ComboBox x:Name="ComboBox1" 
          ItemsSource="{Binding seriesChoices}"
          SelectedValuePath="Key"
          DisplayMemberPath="Value"
          />

1 个答案:

答案 0 :(得分:2)

绑定仅适用于属性,因此请将seriesChoices成员更改为属性,看看是否有效。

class MyViewModel
{
    private Dictionary<int, string> _seriesChoices = new Dictionary<int, string>();

    public Dictionary<int, string> seriesChoices { get { return _seriesChoices; } }

    ...
}

请注意,如果您仅使用getter,则可能必须将Mode=OneWay添加到XAML中的绑定。

另请注意,如果您希望自己的用户界面对字典中的更改做出响应,那就是其他一系列蠕虫,请参阅ObservableCollection<>INotifyPropertyChanged