gpt4 book ai didi

c# - WPF - 从 UserControl ViewModel 引发事件

转载 作者:太空宇宙 更新时间:2023-11-03 23:31:06 33 4
gpt4 key购买 nike

我有一个使用 MVVM 的 WPF 应用程序

MainWindowViewModel 引用了其他 ViewModel,如下所示:-

            this.SearchJobVM = new SearchJobViewModel();
this.JobDetailsVM = new JobDetailsViewModel();
this.JobEditVM = new JobEditViewModel();

我在 MainWindow 上有一个名为 StatusMessage 的标签,它绑定(bind)到 MainWindowViewModel 上的一个字符串属性

我想更新以在任何其他 View 模型上更改此消息并在 UI 上更新它

我是否需要从其他 ViewModel 向 MainWindowViewModel 引发事件?

我该如何实现这一点?

最佳答案

我认为这取决于您希望 View 模型彼此独立的程度;

user3690202 的解决方案虽然可行,但确实在 MainViewModel 上创建了 subview 模型(SearchJobViewModel 等...)的依赖性。

并且由于您的 View 模型可能已经实现了 INotifyPropertyChanged,因此您可以将 subview 模型上的消息公开为一个属性,并让 MainViewModel 监听 subview 模型上的更改。

因此,您会得到如下内容:

class SearchJobViewModel : INotifyPropertyChanged
{
string theMessageFromSearchJob;
public string TheMessageFromSearchJob
{
get { return theMessageFromSearchJob; }
set {
theMessageFromSearchJob = value;
/* raise propertychanged here */ }
}
}

然后在 MainViewModel 中:

this.SearchJobVM = new SearchJobViewModel();
this.SearchJobVM += SearchJobVM_PropertyChanged;

void SearchJobVM_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "TheMessageFromSearchJob")
{
this.StatusMessage = this.SearchJobVM.TheMessageFromSearchJob;
}
}

关于c# - WPF - 从 UserControl ViewModel 引发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32174910/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com