我正在使用WPF + MVVM
与prism
和unity
。
我有三个区域“menu
”,“main
”和“footer
”。
现在,我想在区域“footerViewModel
”中footer
的{{1}}(区域“MainViewModel
”)中设置一个属性。此属性应显示在main
中。
更改事件有效,但不会更新footerView
中的textbox
。
我希望有人可以帮助我吗?
提前致谢。
这是我的view
:
MainViewModel
注意:private CodingGuidline _selectedGuidline;
public CodingGuidline SelectedGuidline {
get { return _selectedGuidline; }
set
{
_selectedGuidline = value;
OnPropertyChanged(() => SelectedGuidline);
OnUpdateAppCodingSpecification(this, EventArgs.Empty);
}
}
private async void OnUpdateAppCodingSpecification(object sender, EventArgs args)
{
try
{
Task<CodingGuidline> result = CodingRepository.GetCodingSpecification(SelectedGuidline.Guid);
_application.CurrentGuidline = await result;
_container.Resolve<FooterViewModel>().OnUpdateCodingGuidline(this, EventArgs.Empty);
}
catch (Exception exception)
{
MessageBox.Show(exception.ToString());
}
}
是_application
,提供共享信息
FooterViewModel:
static object
public FooterViewModel(IUnityContainer container)
{
_container = container;
_application = _container.Resolve<IApplication>();
AssemblyVersion = "Version: " + Assembly.GetExecutingAssembly().GetName().Version;
WebserviceUrl = "Host: " + _application.WebserviceUrl;
UpdateCodingGuidline += OnUpdateCodingGuidline;
}
public event EventHandler UpdateCodingGuidline;
public void OnUpdateCodingGuidline(object sender, EventArgs args) {
if (_application.CurrentGuidline != null)
{
CurrentCodingSpecification = _application.CurrentGuidline.SequenceNumber + " " + _application.CurrentGuidline.Name;
}
else
{
CurrentCodingSpecification = " - ";
}
}
private string _currentCodingSpecification;
public string CurrentCodingSpecification {
get {
return _currentCodingSpecification;
}
set {
if (value != _currentCodingSpecification) {
_currentCodingSpecification = value;
OnPropertyChanged(() => CurrentCodingSpecification);
MessageBox.Show(CurrentCodingSpecification.ToString());
}
}
}
出现,但Messagebox
没有显示更改。
view
中的绑定:
FooterView
答案 0 :(得分:0)
服务是解决此问题的方法。创建一个可以注入所有视图模型的共享服务(因此模拟!)。这管理状态并具有可在值发生变化时通知vm的事件。
在vm初始化期间,您可以订阅该服务。当vm关闭时,您可以再次取消订阅以防止内存泄漏。
有点偏离主题,但这里有一些改进MVVM编码的技巧: