如何通过绑定从数据网格中的两个列表中连接数据

时间:2014-12-22 17:43:51

标签: c# wpf data-binding datagrid

我有两个列表,希望通过绑定DataGrid来加入它们。考虑列表有很多数据,因此操作后面代码中的列表不是一个选项:

public class Person : INotifyPropertyChanged
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int CategoryId { get; set; }
    ...
}

public class Category : INotifyPropertyChanged
{
    public int CategoryId { get; set; }
    public string CategoryName { get; set; }
    ...
}

public partial class MainWindow : Window
{

    private ObservableCollection<Person> PersonList;
    private ObservableCollection<Category> CategoryList;

    ...

    this.PersonDataList.ItemsSource = this.PersonList;

    ...

}

XAML将类似于:

<DataGrid x:Name="PersonDataList" EnableColumnVirtualization="True" EnableRowVirtualization="True" IsReadOnly="True" AutoGenerateColumns="False">
   <DataGridTextColumn Header="First Name" Binding="{Binding FirstName,Mode=OneWay}" />
   <DataGridTextColumn Header="Last Name" Binding="{Binding LastName,Mode=OneWay}" />
   <DataGridTextColumn Header="Category ID" Binding="{Binding CategoryId,Mode=OneWay}" Visibility="Hidden" />
   <DataGridTextColumn Header="Category" Binding="{Binding CategoryName,Mode=OneWay}" />
</DataGrid>

我可以通过ValueConverter来实现它,但是然后更改CategoryList中的CategoryName将不会显示在DataGrid中,这非常糟糕。

我也可以通过使用DataGridComboBoxColumn来实现它,但是我不想在DataGrid中的Persons的每一行上填充CategoryList,我不想显示一个下拉框 - 只是纯文本。

有没有办法通过使用DataGridTemplateColumn和HierarchicalDataTemplate来解决这个问题?

0 个答案:

没有答案