繁体   English   中英

如何将类型为字符串的ObservableCollection绑定到Datagrid

[英]How to bind a ObservableCollection of type string to Datagrid

我有一个相当简单的查询,我有一个名为Complaints的 string类型的ObservableCollection 现在,我想将此ObservableCollection绑定到具有两列的DataGrid :复选框模板列和包含Complaint列。 我想知道如何实现这一目标? 我正在使用MVVM。 我已经将DataGridItemsSource属性设置为Complaints但是看不到数据,因为我不知道在BindingDataGrid的第二列要放置什么。 我该怎么做呢?

我的视图模型

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM