我尝试将类型用户列表绑定到包含2列的数据网格中。
类用户:
public class User
{
private string username;
private string password;
private Object person;
public User(string _username, string _password, Object _person=null)
{
username = _username;
password = _password;
person = _person;
}
public string UserName
{
get { return username; }
set { username = value; }
}
public string Password
{
get { return password; }
set { password = value; }
}
public Object Person
{
get { return person; }
set { person = value; }
}
main.xaml:
<DataGrid Name="UserGrid" ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Header="User name" Binding="{Binding UserName}"/>
<DataGridTextColumn Header="Person" Binding="{Binding Person}"/>
</DataGrid.Columns>
</DataGrid>
main.xaml.cs
UserGrid.DataContext = listOfUsers;
此代码工作正常! 它将用户列表绑定到DataGrid中。 现在它显示了用户名的值和人的价值。
但我想显示对象人的内部属性。 让我们说,呼叫人的对象是食物类型,并且具有称为品味的属性。
如何让DataGrid显示用户名的值和 Person.taste 的值?
答案 0 :(得分:0)
根据您希望如何显示数据,您可以执行以下几项不同的操作(这不是详尽的列表):
Person.Food.taste
。ToString()
类添加Person
覆盖,并按照您希望的方式返回字符串。如果不做额外的工作,您将无法以这种方式进行编辑,但不确定是否需要进行编辑。使用DataGridTemplateColumn
以您想要的任何自定义方式显示数据(并根据需要处理您自己的编辑)。例如:
<DataGridTemplateColumn
Header="Person">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate
DataType="{x:Type local:User}">
<!-- Put any template you want here -->
<TextBlock Text="{Binding Person.Food.taste}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
修改:根据您的跟进,如果您希望列显示不同类型对象的不同数据,则需要使用我提到的DataGridTemplateColumn
,设置{{1} }为每种类型的数据,并创建一个模板选择器来选择正确的数据。因此,您的专栏将如下所示:
DataTemplate
您的模板选择器将如下所示:
<DataGridTemplateColumn Header="Rank">
<DataGridTemplateColumn.CellTemplateSelector>
<local:RankTemplateSelector>
<local:RankTemplateSelector.EmployeeTemplate>
<DataTemplate DataType="{x:Type local:Employee}">
<TextBlock Text="{Binding Rank}" />
</DataTemplate>
</local:RankTemplateSelector.EmployeeTemplate>
<local:RankTemplateSelector.CustomerTemplate>
<DataTemplate DataType="{x:Type local:Customer}">
<TextBlock Text="N/A" />
</DataTemplate>
</local:RankTemplateSelector.CustomerTemplate>
<local:RankTemplateSelector.ClubMemberTemplate>
<DataTemplate DataType="{x:Type local:ClubMember}">
<TextBlock Text="N/A" />
</DataTemplate>
</local:RankTemplateSelector.ClubMemberTemplate>
</local:RankTemplateSelector>
</DataGridTemplateColumn.CellTemplateSelector>
</DataGridTemplateColumn>