c# – 使用Caliburn.Micro从ViewModel调用UserControl的方法

c# – 使用Caliburn.Micro从ViewModel调用UserControl的方法,第1张

概述我正在使用Caliburn.Micro编写一个ViewModel-first MVVM应用程序 My View包含第三方UserControl,它实现了我想要/需要从关联的ViewModel调用方法.如何在坚持MVVM原则的同时做到这一点? 在SO上存在一个旧的thread,其中在更具体的上下文中询问类似的问题.如果有人可以充实那里建议的方法,我将不胜感激. 方法一表明View可以订阅IEven 我正在使用Caliburn.Micro编写一个viewmodel-first MVVM应用程序
My VIEw包含第三方UserControl,它实现了我想要/需要从关联的viewmodel调用的方法.如何在坚持MVVM原则的同时做到这一点?

在SO上存在一个旧的thread,其中在更具体的上下文中询问类似的问题.如果有人可以充实那里建议的方法,我将不胜感激.

方法一表明VIEw可以订阅IEventAggregator消息.但我不是必须使用代码隐藏文件来做到这一点? (我认为这在MVVM中是一个很大的否定)

关于方法二,我不知道如何做到这一点.关于方法三,这就是我首先尝试的但不知何故我没有完全开始工作.

解决方法 让我澄清一下你的理解:

通常可以避免代码隐藏中的代码,但这只是因为MVVM可以很容易地绑定到viewmodel属性和命令,以便将可视元素与幕后功能连接起来

假设它没有跨越关注的边界,那么在视图的代码隐藏中特定于视图的代码是完全可以接受的.例如,我在我的应用程序中有一个视图,它对页面进行了一些可视化处理,为此,我要求视图中有代码.此代码也可能与viewmodel层交互,但它不会直接引用viewmodel,因此保持我的组件松散耦合

如果您有需要调用特定方法的控件,那么创建事件聚合器消息以将通知传播到视图是完全正常的,因为您仍然保持视图模型和视图之间的关注分离(并且应用程序组件保持封装和可测试)

示例视图(为了清楚起见,我已将所有事件聚合器连线代码和潜在的依赖注入内容留下):

public class MyVIEw : IHandle<SomeNotificationMessageType>{    // Handler for event aggregator messages of type SomeNotificationMessageType    public voID Handle(SomeNotificationMessageType message)    {        // Call a method on one of the page controls        SomePageControl.someMethod();    }}

显然,你不会在viewmodel中做到这样的事情:

public class Myviewmodel : IVIEwAware{    public voID DoSomethingThatAffectsVIEw()    {        var vIEw = this.GetVIEw() as MyVIEw;        vIEw.somePageControl.someMethod();    }}

由于您紧密耦合Myviewmodel和MyVIEw,因此违反了MVVM原则.

如果您想在caliburn micro中使用Context属性,该属性允许在同一视图模型上显示多个视图,该怎么办?上面的代码会破坏 – 即使你检查了VIEw类型,你仍然会得到意大利面条代码,例如

public class Myviewmodel : IVIEwAware{    public voID DoSomethingThatAffectsVIEw()    {        var myvIEw = this.GetVIEw() as MyVIEw;        if(myvIEw != null)                    myvIEw.somePageControl.someMethod();        var myothervIEw = this.GetVIEw() as MyOtherVIEw;        if(myothervIEw != null)                    myothervIEw.somePageControl.someMethod();        // ad infinitum...    }}

当然这是主观的:可能是您的usercontrol以复杂的方式影响了视图模型和视图,在这种情况下,您可能需要考虑查看体系结构并确定该用户控件如何更好地适应

你对UC是什么以及它的方法有什么背景知识吗?

总结

以上是内存溢出为你收集整理的c# – 使用Caliburn.Micro从ViewModel调用UserControl的方法全部内容,希望文章能够帮你解决c# – 使用Caliburn.Micro从ViewModel调用UserControl的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1218521.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存