2013-10-30 34 views
0

目前我正在学习用WPF MVVM,并有可能一个疯狂的想法...WPF MVVM一个视图中的多个对象类型

我有几个简单的类:

public class Car : IProduct 
{ 
    public int Id {get;set;} 
    public string Brand {get;set;} 
    // some custom properies 
} 
public class Seat : IProduct 
{ 
    public int Id {get;set;} 
    public string Brand {get;set;} 
    // some custom properties 
} 

的想法是,我有一个编辑器视图为不同的模型。

public class ProductViewModel<T> : ViewModelBase, IProductViewModel<T> where T : IProduct 
    { 
    private T m_editorModel; 
    public T EditorModel 
    { 
     get { return m_editorModel; } 
     set 
     { 
     m_editorModel = value; 
     RaisePropertyChanged(() => EditorModel); 
     } 
    } 

    public Type ModelType 
    { 
     get { return typeof(T); } 
    } 
    } 

哪些可以后记集查看的DataContext

viewModel = ViewModelFactory.CreateViewModel<IProductViewModel<Car>>(); 
view = ViewFactory.CreateView<ProductView>(); 
view.DataContext = viewModel; 
// etc... 

的问题是,我不知道是否有可能或如何在运行时创建 的ObservableCollection同一对象EditorModel的。

为每个类创建它自己的视图和viewmodel或者完全不同的东西可能更容易吗?

+0

是否在您的ProductViewModel 类中添加ObservableCollection ?您的问题与您的potiential ObservableCollection将包含不同类型的对象但绑定到相同控件的事实有关吗? – AirL

+0

是的。 ObservableCollection 应该在某些listview控件中可见。也许我很累我没有注意到我可以做'公开ObservableCollection SomeModels = new ObservableCollection ();'。现在要绑定他们来查看;) – Tomislav

回答

2

在MVVM中一般[我不是在这里为大家说话],你不希望从代码实例化视图。相反,我们使用和操作数据。要改变的观点,我们改变视图模型并经常在简单DataTemplate S设定两者之间的连接:

<DataTemplate DataType="{x:Type ViewModels:MainViewModel}"> 
    <Views:MainView /> 
</DataTemplate> 
... 
<DataTemplate DataType="{x:Type ViewModels:UsersViewModel}"> 
    <Views:UsersView /> 
</DataTemplate> 

这样,我们并不需要明确设置任何DataContext秒。我们可以简单地有每个视图模型延伸BaseViewModel属性:

public BaseViewModel ViewModel 
{ 
    get { return viewModel; } 
    set { if (viewModel != value) { viewModel = value; NotifyPropertyChanged("ViewModel"); } } 
} 

我们可以改变视图模型,因此看法是这样的:

ViewModel = new UsersView(); 

然后我们就可以在ContentControl这样显示的相关视图:

<ContentControl Content="{Binding ViewModel}" /> 

最后,在我看来,你真的应该创建一个视图模型为每个视图...视图模型的唯一工作就是亲提供每个视图的数据和功能。所以除非你有多个相同的视图,否则你需要不同的视图模型。它但是可能有一个视图模型,所有的视图绑定到,但我建议反对大型应用程序。

+0

最后,这是我走的路。谢谢 – Tomislav

相关问题