我有两个列表,希望通过绑定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来解决这个问题?