如何将类型为String的ObservableCollection绑定到Datagrid

时间:2017-08-19 19:24:13

标签: c# .net wpf mvvm datagrid

我有一个相当简单的查询,我有ObservableCollection类型string,名为投诉。现在,我想将此ObservableCollection绑定到包含两列的DataGrid:复选框模板列和包含投诉的Complaint列。我想知道如何实现这一目标?我正在使用MVVM。我已将ItemsSource的{​​{1}}属性设置为DataGrid,但无法查看数据,因为我不知道Complaints中要为Binding添加什么内容1}}。我该怎么做?

  

我的视图模型

DataGrid
  

我的数据网格

public class MyViewModel() : INotifyPropertyChanged
{
     private ObservableCollection<string> _complaints;

     public ObservableCollection<string> Complaints
     {
          get
          {
               return _complaints;
          }
          set
          {
               _complaints = value;
               NotifyPropertyChanged("Complaints");
          }
     }

}

1 个答案:

答案 0 :(得分:3)

您需要设置DataGridTextColumn的Binding属性。此绑定与源集合的数据项相关。由于您的源集合本身是您要在列中显示的项目,因此绑定将是项目本身。

<DataGridTextColumn Width="93.4782*" Header="Complaints" Binding="{Binding}"/>

或等效地:

<DataGridTextColumn Width="93.4782*" Header="Complaints" Binding="{Binding Path=.}"/>

通常,对于DataGrid,您将绑定到具有要在列中显示的各种属性的对象集合,而不仅仅是字符串集合。

<强>型号:

public class Complaint : INotifyPropertyChanged
{
    public bool IsActive { get; set; }
    public string Content { get; set; }
    ...
}

查看型号:

public class ComplaintsViewModel
{
    public ObservableCollection<Complaint> Complaints { get; set; }
    ...
}

查看:

<DataGrid ItemsSource="{Binding Complaints}">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Header="Active" Binding="{Binding IsActive}"/>
        <DataGridTextColumn Header="Content" Binding="{Binding Content}"/>
    </DataGrid.Columns>
<DataGrid/>