c#-将对象从父视图传递到MVVM中的子视图
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-将对象从父视图传递到MVVM中的子视图,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2187字,纯文字阅读大概需要4分钟。
内容图文
我目前正在尝试使用WPF和MVVM,但最近遇到了一个我不知道如何解决的问题.我对此并不陌生,所以如果事情不应该如此,请告诉我.
我有一个ParentView及其ParentViewModel. ParentView拥有两个视图SubViewA和SubViewB,它们都有自己的ViewModel.这是我的ParentView.xaml:
<local:ViewBase.DataContext>
<local:ParentViewModel x:Name="Model" />
</local:ViewBase.DataContext>
<Grid>
<local:SubViewA Visibility="{Binding ElementName=Model, Path=SubViewAVisibility}" />
<local:SubViewB Visibility="{Binding ElementName=Model, Path=SubViewBVisibility}" />
</Grid>
我想做什么:SubViewModelB具有绑定到SubViewB的属性.我想在ParentViewModel中发生某个事件时更改该属性.我想应该通过将SubViewModelB中的属性绑定到ParentViewModel中的属性来完成,但是我不确定如何?我在ParentView.xaml中尝试了以下内容:
<local:SubViewB Visibility="{Binding ElementName=Model, Path=SubViewBVisibility}" SomeProperty="{Binding ElementName=Model, Path=WhatIWantThePropertyToBe}" />
但这使我无处可去.
那么我该如何解决呢?我知道我可以通过MVVM light工具包中的消息传递来完成此操作,但这似乎与我要执行的操作不适当.有什么建议么?
谢谢
解决方法:
听起来像是解决EventAggregator模式的好方法.有一些很棒的实现,例如Microsoft Prism或TinyMessenger提供的实现(非常轻巧)
作为一个代码示例,您将执行以下操作(使用Prism,未经测试的代码)
public class ParentViewModel
{
private IEventAggregator eventAggregator;
public ParentViewModel(IEventAggregator eventAggregator)
{
this.eventAggregator = eventAggregator;
}
public void PublishSomeEvent()
{
// When a condition occurs, publish an event any subscribers
// that may be listening
this.eventAggregator.GetEvent<SomeEvent>()
.Publish(new SomeEvent("Hello World!")));
}
}
public class SubViewModel
{
private IEventAggregator eventAggregator;
public SubViewModel(IEventAggregator eventAggregator)
{
eventAggregator.GetEvent<SomeEvent>.SomeEvent(OnSomeEventOccurred);
}
public void OnSomeEventOccurred(SomeEvent arg)
{
// This method called when ParentViewModel publishes the event
Console.WriteLine(arg.OptionalMessage);
}
}
您将需要单独的事件声明.例如,我用这个
public SomeEvent : CompositePresentationEvent<SomeEvent>
{
public SomeEvent(string optionalMessage)
{
this.optionalMessage = optionalMessage;
}
public string OptionalMessage { get { return optionalMessage; } }
}
内容总结
以上是互联网集市为您收集整理的c#-将对象从父视图传递到MVVM中的子视图全部内容,希望文章能够帮你解决c#-将对象从父视图传递到MVVM中的子视图所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。