WPF中的动态视图

时间:2013-04-26 14:40:08

标签: c# wpf view observablecollection

我正在尝试动态更改UserControl中定义的ObservableCollection次观看。

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});

显然,当创建该视图的新对象然后将其分配给Grid上的子项时,这就成了一个问题 - 它会给我一个类型错误。

我尝试过类似的事情:

_items[0].MView = new UserControl(); // I know this wouldn't work

我的主要问题是,是否有人试图实施这样的事情,你是如何解决这个问题的?

由于

1 个答案:

答案 0 :(得分:9)

正如@HighCore所指出的,WPF允许更好地动态确定要显示的视图,同时保持关注点分离,因此您不会将视图逻辑与业务逻辑混合。 MVVM是实现这一目标的经过验证的真正方法。

基本上,您要做的是为要显示的每个“事物”创建一个ViewModel。然后,为每个ViewModel创建一个DataTemplate,即View。 DataTemplate可以是自包含的,也可以只指向UserControl。然后,使用DataBound的ContentPresenter到CurrentItem属性,或者当你将CurrentItem设置为特定的ViewModel时,WPF会为你找到合适的DataTemplate(View)并显示它相应

网上有几个演示证明了这一点,并且在StackOverflow上也有几个这种模式的例子。似乎与您要求的内容非常接近的一个示例是:Switching between Views/UserControls using MVVM