[英]How to bind a ObservableCollection of type string to Datagrid
我有一个相当简单的查询,我有一个名为Complaints的 string
类型的ObservableCollection
。 现在,我想将此ObservableCollection
绑定到具有两列的DataGrid
:复选框模板列和包含Complaint
列。 我想知道如何实现这一目标? 我正在使用MVVM。 我已经将DataGrid
的ItemsSource
属性设置为Complaints
但是看不到数据,因为我不知道在Binding
为DataGrid
的第二列要放置什么。 我该怎么做呢?
我的视图模型
public class MyViewModel() : INotifyPropertyChanged
{
private ObservableCollection<string> _complaints;
public ObservableCollection<string> Complaints
{
get
{
return _complaints;
}
set
{
_complaints = value;
NotifyPropertyChanged("Complaints");
}
}
}
我的数据网格
<DataGrid x:Name="dg_pc" ItemsSource="{Binding Path=Complaints}" Grid.Column="0">
<DataGrid.Columns>
//Checkbox Template Column.
<DataGridTemplateColumn Width="6.5217*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="cb_datagrid" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
//This is the column, where I need to display the **Complaint** Collection
<DataGridTextColumn Width="93.4782*"Header="Complaints" />
</DataGrid.Columns>
</DataGrid>
您需要设置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/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.