C# 如果oldValue为null,MvvmLight RaisedPropertyChanged不广播PropertyChanged消息? .NET Framework版本4.5.51641 GalaSoft.MvvmLight.WP8版本4.2.30.23483 GalaSoft.MvvmLight.Extras.WP8版本4.2.30.23483
如果oldValue为null,则引发问题PropertyChanged不会广播PropertyChangedMessage 在my MainViewModel.cs中,我具有以下属性:C# 如果oldValue为null,MvvmLight RaisedPropertyChanged不广播PropertyChanged消息? .NET Framework版本4.5.51641 GalaSoft.MvvmLight.WP8版本4.2.30.23483 GalaSoft.MvvmLight.Extras.WP8版本4.2.30.23483,c#,windows-phone-8,mvvm-light,C#,Windows Phone 8,Mvvm Light,如果oldValue为null,则引发问题PropertyChanged不会广播PropertyChangedMessage 在my MainViewModel.cs中,我具有以下属性: public Headline NewsHeadline { get { return _newsHeadline; } set { if (_newsHeadline ==
public Headline NewsHeadline
{
get
{
return _newsHeadline;
}
set
{
if (_newsHeadline == value)
{
return;
}
var oldValue = _newsHeadline;
_newsHeadline = value;
RaisePropertyChanged(NewsHeadlinePropertyName, oldValue, value, true);
}
}
在my DetailViewModel.cs中,我有以下声明:
Messenger.Default.Register<PropertyChangedMessage<Headline>>
(
this,
(action) => DispatcherHelper.CheckBeginInvokeOnUI(() => this.SelectedNewsHeadline = action.NewValue)
);
Messenger.Default.Register
(
这
(action)=>DispatcherHelper.CheckBeginInvokeOnUI(()=>this.SelectedNewsHeading=action.NewValue)
);
在MainViewModel.cs中。当用户点击列表框中的某个项目时,所选项目将被添加到NewsHeading属性中-用户第一次点击某个项目时,oldValue为null;但是,如果从列表框中选择任何后续项,则RaisePropertyChanged会广播PropertyChangedMessage
如果oldValue为null,如何从RaisedPropertyChanged广播PropertyChanged消息
谢谢 问题可能是消息是在创建DetailViewModel之前发送的,并且消息是连续注册的 您可以通过在发送和接收消息的过程中设置断点来检查这是否是一种行为。如果消息已发送但未收到,则可能就是这种情况 解决这个问题的一个新方法是,在执行开始时强制应用程序创建
DetailViewModel
,而不是等到第一次使用它
为此,请转到ViewModelLocator.cs文件,并在注册DetailViewModel
的命令中添加true
参数。即,替换:
SimpleIoc.Default.Register<DetailViewModel>();
simpleoc.Default.Register();
与:
SimpleIoc.Default.Register(true);
这将强制立即创建DetailViewModel,因此消息将被注册。看起来MvvmLight支持此方案。您是否设置了断点来测试是否要进行RaisePropertyChanged调用以及匿名回调?谢谢,这就是解决方案。
SimpleIoc.Default.Register<DetailViewModel>(true);