【问题标题】:Q: Update viewmodel property from a listview binded textbox问:从 listview 绑定的文本框更新 viewmodel 属性
【发布时间】:2021-03-05 07:54:13
【问题描述】:

我有一个文本框,其文本绑定到列表视图选定项,如下所示:

<TextBox x:Name="txtAdditional" Width="300" Text="{Binding ElementName=lstPersons, Path=SelectedItem.Additional, Mode=OneWay}" />

现在我想实现一种机制,使用此文本框将新项目添加到列表视图以获取实际数据。所以我想将文本框的文本绑定到视图模型的一个属性,以便它可以被命令处理。

所以它的文本框文本必须绑定到 listviews selecteditem 并且另外绑定到我的视图模型的属性。

我四处搜索并找到了一些方法,但我不禁想到应该有一些更简单的机制来归档这个目标。

我现在发现了什么:

  1. 将 MultiBindung 与某种 ValueConverter 一起使用?所以在我看来,这主要用于显示而不是更新 viewmodels 属性。
  2. 使用一些自定义的自定义控件?
  3. Impossible WPF Part 1: Binding Properties 中使用具有输入和输出依赖属性的 BindingProxy?

是否有另一种更简单的解决方案,或者我必须使用上述其中一个? 如果应该使用其中一种方法,您会选择哪一种?

我不禁想到这个问题还没有被考虑过,使用 mvvm 模式?! ;-)

【问题讨论】:

  • 您应该在视图模型中添加一个属性,例如 SelectedPerson。在需要时将此属性用作每个控件的绑定源。例如将其绑定到ListView.SelectedItemTextBox.Text。您应该始终将视图模型视为唯一的数据源,而不是其他一些控件。数据总是在控制 视图模型之间流动,但“从不”控制 控制。首先这样思考会让事情变得更容易。

标签: wpf mvvm properties binding


【解决方案1】:

是的,感谢 BionicCode 的提示。

我们,或者更好的是我应该把 MVVM 的概念想出来。当然没有 - 或者至少尽可能少的代码。

我将属性“selectedPerson”添加到我的视图模型中,并将列表视图的 SelectedItem 绑定到此属性。因此,与对象相关的属性直接通过我的视图模型中的“选定”对象就在手边,根本不需要访问文本框内容。

感谢 BionicCode 的提示!

【讨论】:

    猜你喜欢
    • 2012-07-11
    • 1970-01-01
    • 2015-12-08
    • 2011-09-19
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多