MVVM:绑定到业务模型对象集合时使用命令

时间:2013-04-17 11:58:53

标签: wpf mvvm collections command

我们是否应该将模型属性直接绑定到视图一直存在争议。但是大多数xamples在线绑定模型属性以直接查看,例如{Binding Model.Property}

我正在停止一个简单的WPF应用程序,我有一个数据网格,每行都有一个显示弹出窗口的按钮。

商业模式如下:

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

viewmodel类看起来像

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

}

DataGrid的{​​{1}}属性绑定到ItemsSource的{​​{1}}属性。现在,在这种情况下,如果我在ItemsList中绑定viewmodelCommand按钮,那么它会在业务模型类中查找命令。 如何在ViewLog本身中定义命令,而无需在datagrid中编写代理/包装器属性?

1 个答案:

答案 0 :(得分:0)

我同意为子集合创建ViewModel是抽象引发仪式的痛苦和练习,但我认为您不需要这些视图模型来处理命令。您可以为Button提供不同的DataContext,以便它绑定到您希望的任何视图模型(或模型):

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