可以在属性更改事件时为属性赋值吗?

发布于 2024-09-10 11:20:45 字数 426 浏览 3 评论 0原文

我正在 wpf - mvvm 模型中工作。

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

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

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

但问题是:即使“newmarketname”的值更改为空,它也没有反映在 UI 中。

有什么问题吗?

I am working in wpf - mvvm model.

I have a textbox which holds- "marketName". In xaml I am binding the property - "newmarketname"(which is defined in my viewmodel) to this textbox. Once if user enter a new market name in that text box, the "set" method of the "newmarketname" get called.

In set method of the "newmarketname", I call the PropertyChanged event.

And the property changed handler will call a fucntion, in which I check if the market name is already existing; if "yes", I will assign string.Empty to the property "newmarketname".
So the set method of "newmarketname" again get called followed by PropertyChanged event.

But the issue is: even though the value of "newmarketname" is getting changed to empty, it is not getting reflected in the UI.

What's the issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

唔猫 2024-09-17 11:20:45

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

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

WPF will ignore PropertyChanged events that are raised while it is setting the value. One workaround is to use a Converter (even one that just returns the raw value) and set UpdateSourceTrigger to LostFocus. Another is to set IsAsync to True.

This has been fixed in .NET 4.0. See this blog entry for more information: http://karlshifflett.wordpress.com/2009/05/27/wpf-4-0-data-binding-change-great-feature/

心房的律动 2024-09-17 11:20:45

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

Are you changing the underlying variable instead of the property? That's what I always do (by mistake).

羁绊已千年 2024-09-17 11:20:45

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

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

Maybe you could set your binding mode to TwoWay, this way it will reflect both changes from the UI and code behind

<TextBlock Text="{Binding newmarketname, Mode=TwoWay}" />
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文