WPF中的动态视图
本文关键字:视图 动态 WPF | 更新日期: 2023-09-27 18:11:13
我正在尝试动态更改ObservableCollection
中定义的UserControl
视图。
public class MItem : INotifyPropertyChanged
{
private UserControl _mView;
public UserControl MView
{
get { return _mView; }
set
{
if (_mView != value)
{
_mView = value;
OnPropertyChanged("MView");
}
}
}
...
}
在另一个视图中,我有:
ObservableCollection<MItem> _items = new ObservableCollection<MItem>;
_items.Add(new MItem{MView = MyView});
显然,当创建一个视图的新对象,然后将其分配给网格上的子对象时,会出现一个问题-它会给我一个类型错误。
我试过这样做:
_items[0].MView = new UserControl(); // I know this wouldn't work
我的主要问题是,有没有人尝试过实现这样的东西,你是如何绕过它的?
谢谢
正如@HighCore所指出的,WPF允许以一种更好的方式动态决定要显示的视图,同时保持关注点分离,这样您就不会将视图逻辑与业务逻辑混合在一起。而MVVM是实现这一目标的可靠方法。
本质上,你想要做的是为你想要显示的每个"东西"创建一个ViewModel。然后,为每个ViewModel(即视图)创建一个DataTemplate
。DataTemplate
可以是自包含的,也可以只指向UserControl
。然后,你使用一个ContentPresenter
,它是绑定到一个CurrentItem属性,或者别的什么,当你设置CurrentItem到一个特定的ViewModel, WPF将为你找到适当的DataTemplate
(视图),并相应地显示它。
在网上有几个演练演示了这一点,在StackOverflow上也有几个这种模式的例子。一个例子,似乎非常接近你所要求的是在这里:使用MVVM之间切换视图/用户控件。