我尝试将wpf文本框绑定到放置在viewmodel中的字典。 viewmodel用作视图的datacontext。 我找到了很多例子,听起来很简单,但对我来说不行。
查看:
TextBox x:Name =“txbTest”Grid.Row =“10”Grid.Column =“2”Text =“{Binding MyDict [First]}”
视图模型:
public Dictionary<string, string> MyDict = new Dictionary<string, string>
{
{"First", "Test1"},
{"Second", "Test2"}
};
我尝试了我发现的所有变种
Text="{Binding MyDict[First]}"
Text="{Binding Path=MyDict[First]}"
Text="{Binding MyDict[First].Text}"
Text="{Binding MyDict[First].Value}"
但没有任何作用,文本框是空的。有什么想法吗?
答案 0 :(得分:25)
您的代码中存在绑定错误,因为MyDict
不是属性。您必须绑定到Property
而不是Field
System.Windows.Data Error: 40 : BindingExpression path error: 'MyDict' property not found on 'object' ''MainWindow' (Name='')'. BindingExpression:Path=MyDict[First]; DataItem='MainWindow' (Name=''); target element is 'TextBox' (Name='textBox1'); target property is 'Text' (type 'String')
将MyDict Field
更改为Property
,如下所示
private Dictionary<string, string> _MyDict;
public Dictionary<string, string> MyDict
{
get { return _MyDict; }
set { _MyDict = value; }
}
在ViewModel
初始化MyDict的构造函数中。
MyDict = new Dictionary<string, string>
{
{"First", "Test1"},
{"Second", "Test2"}
};
以下两个变体不起作用,因为MyDict [“key”]返回string
而string
没有Text
或Value
属性。其他两个变种应该有效。
Text="{Binding MyDict[First].Text}"
Text="{Binding MyDict[First].Value}"