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

17

我试图将一个位于ViewModel中的字典与WPF文本框绑定。该ViewModel作为视图的DataContext。

我找到了很多示例,听起来很简单,但对我来说却不起作用。

视图:

TextBox x:Name="txbTest" Grid.Row="10" Grid.Column="2" Text="{Binding MyDict[First]}"

ViewModel:

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}"

但是什么都不起作用,文本框为空。有什么想法吗?


你不能绑定到一个字段。将MyDict定义为属性。我在我的回答中分享了示例代码。 - Anand Murali
1
显然,这可能非常简单。谢谢,它有效。我被一些示例引导失败了。 - user2377283
1个回答

35

你的代码存在绑定错误,因为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 = new Dictionary<string, string>
        {
            {"First", "Test1"},
            {"Second", "Test2"}
        };
以下两种变体将不起作用,因为MyDict ["key"]返回一个字符串,而字符串没有Text或Value属性。 另外两个变量应该可以工作。
Text="{Binding MyDict[First].Text}"
Text="{Binding MyDict[First].Value}"
以下绑定将有效。
Text="{Binding MyDict[First]}"
Text="{Binding Path=MyDict[First]}"

1
显然,这可以非常简单。谢谢,它很有效。我曾被一些示例误导过。 - user2377283
1
你会如何以编程的方式实现这个?比如说我动态创建文本框和字典。 - estebro
@estebro 跟随其他编程指南进行程序绑定,然后将字典元素指定为绑定属性即可。 - Clonkex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接