【问题标题】:WPF Bind TextBox to List<string> using variable for indexWPF 使用索引变量将 TextBox 绑定到 List<string>
【发布时间】:2016-01-02 05:52:27
【问题描述】:

我有一个窗口,它显示可变数量的相同用户控件,其中包含(除其他外)一个文本框。单个 ViewModel 同时服务于窗口和用户控件。当所需的索引传递给 UserControl 的构造函数时,如何将 UserControl 的 TextBox 的 Text 属性绑定到我的视图模型中的字符串列表的元素?

我还需要 Mode="TwoWay" 和 UpdateSourceTrigger="PropertyChanged"。

使用 VS2013、.NET 4.5.2 和 MVVM-Light 框架。

谢谢。

【问题讨论】:

  • 为什么不使用额外的属性来代替尝试将 List 绑定到字符串属性?

标签: c# wpf mvvm data-binding mvvm-light


【解决方案1】:

决定创建一个新的 ViewModel 类来只为 UserControls 提供服务,每个对象一个。创建 UserControls 的同一个类现在创建 ViewModels 并在 UserControls ctor 中传递一个。

【讨论】:

    【解决方案2】:

    您需要在 ViewModel 中创建一个新属性,作为该调用的“包装器”。

    public string MyElementItem {
       get { return myStringList[myAwesomeIndexFromConstructor]; }
       set { 
          myStringList[myAwesomeIndexFromConstructor] = value; 
          RaisePropertyChanged(...);
    }
    

    然后绑定到这个新属性,它应该会为你创造奇迹!

    <TextBox Text="{Binding MyElementItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
    

    【讨论】:

    • 知道索引的是UserControl的构造函数; ViewModel 包含提供所有用户控件的列表。我更新了我的帖子以阐明更大的图景。
    • 你能以某种方式用索引值“喂养”视图模型吗?通过将值传递给其构造函数(取决于其设置方式)或发送包含要使用的索引值的命令。
    • 但是视图模型如何跟踪哪个索引对应于哪个 UserControl?你是说 UserControl 应该在向 ViewModel 询问字符串之前以某种方式在 ViewModel 中设置一个属性吗?
    • 您是否为每个单独的 UserControl 使用共享 ViewModel?
    • 是的,这就是为什么 ViewModel 的属性是一个列表。 ViewModel 为包含 UserControl 和 UserControl 的 Window 提供服务。
    猜你喜欢
    • 2014-06-03
    • 2011-02-21
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 2011-10-26
    相关资源
    最近更新 更多