我对数据绑定有点新意,并对如何在数据上下文中正确访问“子”对象提出疑问。在我的代码中,我有一个简单的视图模型对象:
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"
/>
答案 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