【问题标题】:C# WPF prevent binding back to listviewC# WPF 防止绑定回列表视图
【发布时间】:2015-02-17 14:23:50
【问题描述】:

我的 WPF 窗口中有一个 Listview,并且我绑定了一个属性 List<User> users; 我在要编辑用户的列表视图旁边还有一个编辑/添加表单,然后单击保存按钮以保存用户。我将表单的 groupbox 的 bindingContext 设置为 currentUser,这是在 ListView 的 OnSelectionChange 事件上设置的。一切(绑定)工作正常,但我的问题是:

当我更改绑定到 currentUser 的文本框的文本并离开文本框时,它会在 listView 中自动更新。我首先想在更新 ListView 之前单击“保存用户”。我怎样才能做到这一点?

谢谢。

【问题讨论】:

  • 请提供代码示例。
  • 如果它们都绑定到同一个对象,这是正常行为
  • @Muds,这就是我想要阻止的。
  • 那么它会变脏,v变脏..
  • 尝试更改属性并更新源触发器

标签: c# wpf data-binding


【解决方案1】:

选项1:

您可以将textbox(在您的更新表单上)的UpdateSourceTrigger 设置为Explicte, 并且只在点击Save时调用UpdateSource method

选项2:

您还可以设置Listview 的每一列的BindingMode to OneTime,并在Save 之后更新/刷新它的DataContext。 (即通过将 View 的 DataContext 设置为 null 然后将其设置回来。)

【讨论】:

  • 它以某种方式帮助了我,但并不完全。我想要的是,是自动化的。按照你提到的方式,我阻止我的文本框绑定回源,但我真正想要的是实际上阻止列表视图中的项目得到更新。按照你描述的方式,我必须为所有其他文本框做 updatesource。
  • @DesterDezzods,见选项 2。
  • 选项 2 没有帮助。 ' ItemsSource="{Binding users, Mode=OneTime}" ' 这确实会立即更新列表项
  • @DesterDezzods,请尝试将每个列的绑定模式设置为 Onetime,而不是整个 ListView 的 ItemsSource。这将使您的 Listview 显示初始值,直到您明确刷新/更改它的 DataContext。不过,我确实认为 Option1 听起来更常见,也更有意义。
猜你喜欢
  • 2016-02-24
  • 2017-09-22
  • 2014-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
相关资源
最近更新 更多