c# – 视图中的控件如何从视图模型中获取特定数据?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 视图中的控件如何从视图模型中获取特定数据?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1847字,纯文字阅读大概需要3分钟。
内容图文
![c# – 视图中的控件如何从视图模型中获取特定数据?](/upload/InfoBanner/zyjiaocheng/804/2d916eff8e5e407db113e37db0fcfc72.jpg)
我有多个视图(用户控件),每个视图都有自己的ViewModel.要在它们之间导航,我正在使用按钮.按钮显示来自相应视图模型的图像和文本,还需要列和行(因为有10个视图:10列,每列有不同的行数).
现在按钮是动态创建的(我为此创建了一个Navigator控件),对于视图模型,我有基类来保存文本,图像,列和行.可用的视图数量会有所不同(取决于用户级别和某些设置),这就是我需要控制的原因.
问题:我的控件如何从视图模型中获取数据?
现在我有接口INavigator,在(lol)控件本身中定义.视图模型实现它.我可以走对面,让我的控制知道视图模型.两者都看错了.
有一个Navigator控件,可以说是绑定到视图模型列表的Items.它可以将每个视图模型转换为INavigator或ViewModelBase(所有页面都通用)以获取特定的视图模型图像,文本,列和行.因此,任何一个视图模型都知道控件(实现INavigator)或控件知道ViewModelBase ..这是一个问题,两个解决方案绑定紧密控制和视图模型,这在mvvm中是不好的.
示意图
解决方法:
您绘制图表的方式可以回答您自己的问题,即如何为此构建代码.
你需要的是一个VM(我们称之为MainVM),它包含一个ObservableCollection< VMBase>其他虚拟机(使用您的基本类型,以便他们可以愉快地生活在同一个集合中).
您的View需要一个ItemsControl(绑定到您的ObservableCollection< VMBase>),您可以使用VMBase类型公开的属性为Button指定DataTemplate.在Button中设置Command属性以调用SwitchCommand,CommandParameter设置为项本身(即{Binding.}).
您的View还需要一个ContentControl绑定到您可以填充的MainVM上的SelectedVM属性.
实现SwitchCommand以根据CommandParameter中的值设置SelectedVM属性.
public void ExecuteSwitchCommand(object parameter)
{
var vmBase = parameter as VMBase;
if (vmBase != null)
SelectedVM = vmBase;
}
此处提到的所有属性都应该启用INotifyPropertyChanged,以便View在更改和更新UI时进行注册.
要获取ContentControl的不同UI,请将每个特定VM类型的特定于类型的DataTemplates添加到View的Resources文件中(或者如果您很聪明并且正在构建自定义插件框架,请合并资源字典) .
很多人忘了MVVM,重点是View与ViewModel有目的的分离,这意味着你可以为单个ViewModel提供许多视图,这就是它所展示的内容.
内容总结
以上是互联网集市为您收集整理的c# – 视图中的控件如何从视图模型中获取特定数据?全部内容,希望文章能够帮你解决c# – 视图中的控件如何从视图模型中获取特定数据?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。