【问题标题】:WPF binding textbox to dictionary entryWPF 将文本框绑定到字典条目
【发布时间】:2013-08-11 01:56:36
【问题描述】:

我尝试将 wpf 文本框绑定到放置在视图模型中的字典。视图模型用作视图的数据上下文。 我找到了很多例子,听起来很简单,但对我不起作用。

查看:

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

但没有任何效果,文本框是空的。有什么想法吗?

【问题讨论】:

  • 您不能绑定到字段。将MyDict 定义为属性。我已经在我的回答中分享了示例代码。
  • 显然,它可以如此简单。谢谢,它有效。我被一些例子引导失败了。

标签: wpf binding dictionary


【解决方案1】:

您的代码中存在绑定错误,因为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 没有 TextValue 属性。其他两个变体应该可以工作。

Text="{Binding MyDict[First].Text}"
Text="{Binding MyDict[First].Value}"

以下绑定将起作用

Text="{Binding MyDict[First]}"
Text="{Binding Path=MyDict[First]}"

【讨论】:

  • 显然,它可以如此简单。谢谢,它有效。我被一些例子引导失败了。
  • 您将如何以编程方式执行此操作?假设我动态创建了文本框和字典。
猜你喜欢
  • 2016-08-28
  • 1970-01-01
  • 2013-07-13
  • 2023-04-09
  • 2011-07-17
  • 2011-03-27
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
相关资源
最近更新 更多