我想在WPF的Model Code中获取ViewModel Code中的一个参数,请问有什么方式可以实现,最好是比较简单且满足MVVM架构。主要是需要实现在ViewMode Code中动态修改View中Datagrid某一列列宽
30条回答 默认 最新
- 阿里嘎多学长 2024-10-08 19:51关注
获得0.15元问题酬金 AIGC生成:
MVVM架构下WPF Model Code获取ViewModel Code参数
在MVVM架构下,Model Code通常不应该直接访问ViewModel Code,因为这会破坏MVVM的分层结构。然而,如果你确实需要在Model Code中获取ViewModel Code中的参数,可以使用以下方法:
- 使用EventAggregator EventAggregator是一个松耦合的事件传递机制,可以在Model Code和ViewModel Code之间传递数据。首先,在ViewModel Code中发布事件,然后在Model Code中订阅该事件。
// ViewModel Code public class MyViewModel { public event EventHandler<MyEventArgs> MyEvent; public void RaiseMyEvent() { MyEvent?.Invoke(this, new MyEventArgs { MyParameter = "Hello" }); } } // Model Code public class MyModel { private readonly IEventAggregator _eventAggregator; public MyModel(IEventAggregator eventAggregator) { _eventAggregator = eventAggregator; _eventAggregator.GetEvent<MyEventArgs>().Subscribe(OnMyEvent); } private void OnMyEvent(MyEventArgs e) { // 获取ViewModel Code中的参数 string myParameter = e.MyParameter; } }
- 使用Dependency Injection Dependency Injection是一种设计模式,可以在Model Code和ViewModel Code之间注入依赖关系。首先,在ViewModel Code中注入Model Code,然后在Model Code中获取ViewModel Code中的参数。
// ViewModel Code public class MyViewModel { public MyModel MyModel { get; set; } public MyViewModel(MyModel model) { MyModel = model; } } // Model Code public class MyModel { public string GetMyParameter() { // 获取ViewModel Code中的参数 return MyViewModel.MyModel.MyParameter; } }
- 使用Messenger Messenger是一个简单的事件传递机制,可以在Model Code和ViewModel Code之间传递数据。首先,在ViewModel Code中发送消息,然后在Model Code中接收消息。
// ViewModel Code public class MyViewModel { public void SendMessage() { Messenger.Default.Send(new MyMessage { MyParameter = "Hello" }); } } // Model Code public class MyModel { private readonly IMessenger _messenger; public MyModel(IMessenger messenger) { _messenger = messenger; _messenger.Register<MyMessage>(OnMyMessage); } private void OnMyMessage(MyMessage e) { // 获取ViewModel Code中的参数 string myParameter = e.MyParameter; } }
这些方法都可以实现Model Code获取ViewModel Code中的参数,但是需要注意的是,这些方法都需要遵守MVVM架构的分层结构。
解决 无用评论 打赏 举报
悬赏问题
- ¥20 pip2.40更新pip2.43时报错
- ¥15 换yum源但仍然用不了httpd
- ¥50 C# 使用DEVMOD设置打印机首选项
- ¥15 麒麟V10 arm安装gdal
- ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
- ¥20 OPENVPN连接问题
- ¥15 flask实现搜索框访问数据库
- ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
- ¥100 如何用js写一个游戏云存档
- ¥15 ansys fluent计算闪退