【问题标题】:Can assign value to a property on property changed event?可以在属性更改事件上为属性赋值吗?
【发布时间】:2010-07-20 13:01:03
【问题描述】:

我在 wpf - mvvm 模型中工作。

我有一个包含“marketName”的文本框。在 xaml 中,我将属性 - “newmarketname”(在我的视图模型中定义)绑定到此文本框。一旦用户在该文本框中输入新的市场名称,“newmarketname”的“set”方法就会被调用。

在“newmarketname”的set方法中,我调用了PropertyChanged事件。

属性更改处理程序将调用一个函数,在该函数中我检查市场名称是否已经存在;如果“是”,我会将 string.Empty 分配给属性“newmarketname”。 所以“newmarketname”的set方法再次被调用,然后是PropertyChanged事件。

但问题是:即使“newmarketname”的值变为空,它也不会反映在 UI 中。

有什么问题?

【问题讨论】:

  • 如果您发布代码可能会有所帮助
  • 此 PropertyChanged 事件是否与 INotifyPropertyChanged 相关?如果是,那么为什么要从那里调用该函数(以检查现有市场名称),为什么不在 setter 本身中执行该检查,然后更新变量并调用 PropertyChanged 事件?
  • Bcoz...对于此视图模型中的所有属性...我正在调用一种方法...在哪里,取决于属性我会做些什么...
  • 尝试使用依赖属性和 PropertyChangedCallback 来做这件事。
  • 这两者有什么区别?..我的意思是...DP和带有PropertyChanged事件的普通CLR属性

标签: wpf mvvm uiview inotifypropertychanged


【解决方案1】:

WPF 将忽略在设置值时引发的 PropertyChanged 事件。一种解决方法是使用转换器(即使是只返回原始值的转换器)并将 UpdateSourceTrigger 设置为 LostFocus。另一个是将 IsAsync 设置为 True。

这已在 .NET 4.0 中得到修复。有关更多信息,请参阅此博客条目:http://karlshifflett.wordpress.com/2009/05/27/wpf-4-0-data-binding-change-great-feature/

【讨论】:

  • 你能告诉我如何使用这个转换器
【解决方案2】:

您是在更改基础变量而不是属性吗?这就是我一直做的事情(错误地)。

【讨论】:

  • 不...我正在更改属性本身...并且正在调用“属性更改”事件...这里...问题是,一个属性的属性更改事件...您再次更改它...首先从 UI...然后从代码级别
【解决方案3】:

也许您可以将绑定模式设置为 TwoWay,这样它将反映来自 UI 和背后代码的更改

<TextBlock Text="{Binding newmarketname, Mode=TwoWay}" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2021-08-04
    • 1970-01-01
    相关资源
    最近更新 更多