WPF将文本框绑定到字典条目

use*_*283 11 wpf binding dictionary

我尝试将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"}
        };
Run Code Online (Sandbox Code Playgroud)

我尝试了我发现的所有变种

Text="{Binding MyDict[First]}"
Text="{Binding Path=MyDict[First]}"
Text="{Binding MyDict[First].Text}"
Text="{Binding MyDict[First].Value}"
Run Code Online (Sandbox Code Playgroud)

但没有任何作用,文本框是空的.任何的想法?

Ana*_*ali 27

您的代码中存在绑定错误,因为MyDict它不是属性.你必须绑定到a Property而不是aField

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')
Run Code Online (Sandbox Code Playgroud)

所述MyDict改变FieldProperty以下所示等

    private Dictionary<string, string> _MyDict;

    public Dictionary<string, string> MyDict
    {
        get { return _MyDict; }
        set { _MyDict = value; }
    }
Run Code Online (Sandbox Code Playgroud)

ViewModel初始化MyDict 的构造函数中.

        MyDict = new Dictionary<string, string>
        {
            {"First", "Test1"},
            {"Second", "Test2"}
        };
Run Code Online (Sandbox Code Playgroud)

以下两个变体不起作用,因为MyDict ["key"]返回a string并且string没有TextValue属性.其他两个变种应该有效.

Text="{Binding MyDict[First].Text}"
Text="{Binding MyDict[First].Value}"
Run Code Online (Sandbox Code Playgroud)