如何将数据集合绑定到WPF应用程序中的DataGrid?

时间:2018-02-17 00:29:42

标签: c# wpf

我正在使用MVVM设计模式编写一个小型WPF应用程序。我想创建一个CRUD,就像我在DataGrid中显示数据一样。

如何将DataGrid中的每一行绑定到我的Address模型?

以下是我的View-Model的样子。

public class AddressViewModel : ViewModel
{
    public IEnumerable<Address> Addresses { get; set; }

    // .... stripped for simplicity.
}

以下是我的观点

<DataGrid>
    <DataGrid.ItemsSource>
        <CompositeCollection>
            <Binding Path="Addresses" />
        </CompositeCollection>
    </DataGrid.ItemsSource>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Address" />
        <DataGridTextColumn Header="City" />
        <DataGridTextColumn Header="State" />
        <DataGridTextColumn Header="Zip Code" />
        <DataGridTextColumn Header="Country" />
        <DataGridTextColumn Header="County" />
    </DataGrid.Columns>
</DataGrid>

2 个答案:

答案 0 :(得分:0)

您需要将Datagrid的DataContext设置为集合

在XAML中命名您的数据网格,以帮助处理后面的代码,如下所示:

 <DataGrid Name="dgAddresses">

因此,如果您像这样创建IEnumerable(我假设您正在以其他方式创建和填充该列表):

 var addressList = new IEnumerable<Address>();

 dgAddresses.DataContext = AddressList;

答案 1 :(得分:0)

您需要将每列的Binding属性设置为绑定到Address类的公共属性的绑定:

<DataGrid x:Name="dg" ItemsSource="{Binding Addresses}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Address" Binding="{Binding Address}" />
        <DataGridTextColumn Header="City" Binding="{Binding City}" />
        <DataGridTextColumn Header="State" Binding="{Binding State}" />
        ...
    </DataGrid.Columns>
</DataGrid>

另外,请确保将DataContext或其任何父元素的DataGrid设置为视图模型类的实例:

dg.DataContext = new AddressViewModel();