如何将TabControl绑定到ViewModels的集合?
|
基本上我在MainViewModel.cs中:
ObservableCollection<TabItem> MyTabs { get; private set; }
但是,我需要以某种方式不仅可以创建选项卡,还可以在维护MVVM的同时将选项卡的内容加载并链接到其相应的视图模型。
基本上,我如何才能将用户控件作为Tabitem的内容加载,并使该用户控件连接到适当的视图模型。造成这一困难的部分是ViewModel不应构造实际的视图项,对吗?可以吗
基本上,这是否适合MVVM:
UserControl address = new AddressControl();
NotificationObject vm = new AddressViewModel();
address.DataContext = vm;
MyTabs[0] = new TabItem()
{
Content = address;
}
我只问是因为,好吧,我正在从ViewModel内部构造一个View(AddressControl),在我看来,这听起来像是MVVM。
没有找到相关结果
已邀请:
4 个回复
蔬谢窗港
这是绑定在窗口中的外观:
(请注意,如果要在不同选项卡中使用不同的内容,请使用
。每个选项卡的视图模型应该是其自己的类,或者创建自定义
以选择正确的模板。) 数据模板内的UserControl:
壬驴拿歪竞
现在,可以通过将其自身注册到区域MainRegion中来添加视图:
在这里,您可以看到棱镜的特长。 View由ViewModel实例化。就我而言,我是通过控制反转容器(例如Unity或MEF)解析ViewModel的。 ViewModel通过构造函数注入获得注入的View,并将其自身设置为View的数据上下文。 另一种方法是将视图的类型注册到区域控制器中:
使用这种方法可以让您稍后在运行时创建视图,例如由控制器:
因为您已经注册了视图的类型,所以视图被放置在正确的区域中。
联课
Tab是我的TabItemViewModel中的枚举,并且TabItemConverter将其转换为真实的UI。 在TabItemConverter中,只需获取值并返回所需的用户控件即可。
铰齐插
认为这是最简单的方法。 MVVM兼容吗?