我有一个相当简单的查询,我有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");
}
}
}
答案 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/>