有人可以告诉我,为什么我无法在专栏公司(这里是公司名称)中收到预期的结果。在这里,我尝试将我的源数据(类Person)绑定到WPF DataGrid。
Surname | Name | Company
---------------------------------------
Sidorov | Sasha | DataGridBind.Company
Petrov | Misha | DataGridBind.Company
MainWindow.xaml.cs:
namespace DataGridBind
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Person person = new Person("Sasha", "Sidorov", new Company("Teremok") );
Person person1 = new Person("Misha", "Petrov",new Company("SubWay"));
ObservableCollection<Person> persons = new ObservableCollection<Person> { person, person1 };
personDataGrid.ItemsSource = persons;
}
}
}
Person.cs:
namespace DataGridBind
{
public class Person
{
public string Name { get; set; }
public string Surname { get; set; }
public Company Company { get; set; }
public Person() { }
public Person(string _name, string _surname, Company _company)
{
Name = _name;
Surname = _surname;
Company = _company;
}
}
public class Company
{
public string Name {get;set;}
public Company() { }
public Company(string _name)
{
Name = _name;
}
}
}
的Xaml:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:DataGridBind" x:Class="DataGridBind.MainWindow"
Title="MainWindow" Height="350" Width="525">
<Grid >
<DataGrid x:Name="personDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" Margin="10,10,138,177" RowDetailsVisibilityMode="Visible">
<DataGrid.Columns>
<DataGridTextColumn x:Name="nameColumn" Binding="{Binding Name}" Header="Name" Width="SizeToHeader"/>
<DataGridTextColumn x:Name="surnameColumn" Binding="{Binding Surname}" Header="Surname" Width="SizeToHeader"/>
<DataGridTextColumn x:Name="companyColumn" Binding="{Binding Company}" Header="Company" Width="200"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
答案 0 :(得分:1)
因为Company
是一个类,您需要指定要绑定到的Company
的哪个属性
<DataGridTextColumn Binding="{Binding Company.Name}" Header="Company" ... />
否则将在绑定对象上调用ToString()
答案 1 :(得分:0)
为避免这种情况,我们通常在所有域对象上实现ToString()。