一个TextBlock具有以下绑定:Silverlight的结合问题嵌套ViewModel类
<TextBlock Text="{Binding Path=Sum, FallbackValue=9999}"></TextBlock>
的DataContext在SL应用程序的构造函数设置
ViewModelClass viewModelObject=new ViewModelClass();
public Calculator()
{ ....
DataContext=viewModelObject;
}
现在IM在调查模式,所以我删除了所有的DataContext OCCURENCES从文本,所以这是目前唯一的整个项目。
我的ViewModel类实现INotifyPropertyChanged接口和属性Sum存在。
如果我将public int Sum
更改为public int SumDOESNTEXIST
并启动SL应用程序,我收到一个错误,指出找不到属性Sum,因此绑定在某种程度上起作用。
NotifyPropertyChanged("Sum");
在需要的地方
但是正如我在VM我的基本代码发现了以下if
结果为假触发,所以没有人订阅了事件。
protected void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
结果Sum属性被更新,但TextBlock没有指出。
我在做什么错?
编辑:我使用的单向绑定(但双向不会改变任何东西仅供参考),因为我需要更新的文本块属性仅当源属性发生变化(单向绑定的定义)
至于DataContext的,我在这里增加了一个相当直接的检查:
internal void sum_Changed(object sender, TextChangedEventArgs e)
{
if(mySadLabel.DataContext== viewModelObject)
MessageBox.Show("correct");
NotifyPropertyChanged("Sum");
}
的MessageBox显示..
如果DataContext设置INotifyPropertyChanged接口实现我相信有应该是PropertyChanged事件的订阅者?在我的情况下,他们缺席。
你是正确的,你有正确的模式。 – 2011-05-27 02:41:07
鼓舞人心的,但不工作!事件为空,没有人有兴趣更新它可能会触发.. – 2011-05-27 02:42:44
您是否使用特定的mvvm框架? – 2011-05-27 02:43:16