2013-04-17 37 views
0

我們是否應該將模型屬性直接綁定到視圖一直存在爭議。但是大多數xample在線綁定模型屬性以直接查看例如{Binding Model.Property}MVVM:在綁定到業務模型對象集合時使用命令

我正在啓動一個簡單的WPF應用程序,其中有一個datagrid,每行都有一個顯示彈出窗口的按鈕。

商業模式是這樣的:

public class DataGridItem 
{ 
    public string Summary { get; set; } 
    public string Name { get; set; } 
} 

視圖模型類是什麼樣子

public class DataGridItemViewModel : NotifyableEntity 
{ 
    public DataGridItemViewModel() 
    { 
     Data = new ObservableCollection<DataGridItem>(); 
    } 
    public string Summary { get; set; } 

    public string Name { get; set; } 

    public ObservableCollection<DataGridItem> ItemsList { get; set; } 

} 

DataGridItemsSource屬性綁定到的viewmodelItemsList財產。現在在這種情況下,如果我在datagrid中綁定了CommandViewLog按鈕,則它會在業務模型類中查找該命令。 如何在viewmodel本身中定義命令,而無需在viewmodel中編寫代理/包裝器屬性?

+2

這正是爲什麼我不喜歡綁定到(業務)模型。在你知道它之前,你會添加屬性到ViewModel,你會得到很多奇怪的綁定綁定到Model和ViewModel –

回答

0

我同意爲子集合創建ViewModels是一個痛苦和抽象誘導式儀式的練習,但我不認爲你需要這些視圖模型來處理命令。您可以爲Button提供一個不同的DataContext,這樣它就綁定到任何視圖模型(或模型)你想:

.... 
<ItemsControl ItemsSource="{Binding ItemsList}"> 
    <ItemsControl.ItemTemplate> 
    <DataTemplate DataType="{x:Type DataGridItemViewModel}"> 
     <Button Command="{Binding MyCommand}" DataContext="{Binding DataGridItemViewModel}"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
...