2013-10-30 36 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

相關問題