2010-07-20 58 views
0

我正在wpf - mvvm模型中工作。可以将值赋给属性更改事件上的属性吗?

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

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

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

但问题是:即使“newmarketname”的价值得到改变空,它是没有得到体现在UI。

这是什么问题?

+0

方面的变化,如果你发布你的代码,这可能有助于 – 2010-07-20 13:09:01

+0

这是PropertyChanged事件之一与INotifyPropertyChanged有关吗?如果是,那么为什么你从那里调用函数(以检查现有的市场名称),为什么不在setter本身中执行该检查,然后更新该变量并调用PropertyChanged事件? – akjoshi 2010-07-20 13:17:25

+0

Bcoz ...在这个视图模型中的所有属性...我打电话给一个方法...在哪里,取决于属性,我会做些什么... – Relativity 2010-07-20 13:23:51

回答

1

WPF将忽略,而它的值设置引发的PropertyChanged事件。一种解决方法是使用Converter(甚至只返回原始值)并将UpdateSourceTrigger设置为LostFocus。另一个是将IsAsync设置为True。

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

+0

你可以告诉我如何使用这个转换器 – Relativity 2010-07-20 13:36:38

0

您是否在更改底层变量而不是属性?这是我总是这样做的(错误)。

+0

不......我改变财产本身...和“属性更改”事件获取调用... 是的......事情是,在属性改变了一个属性的事件...你再次改变它...这是第一个来自UI ...然后从代码水平 – Relativity 2010-07-20 13:13:25

0

也许你可以设置您的结合模式为双向,这样一来就会反映在用户界面和代码背后

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