2014-10-30 143 views
0

谁能告诉我,请我为什么不能在列公司(在这里,公司名称)收到预期的效果。在这里,我曾尝试我的源数据(类人)绑定到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> 

回答

1

因为Company是你需要指定你想要的的Company属性绑定到

<DataGridTextColumn Binding="{Binding Company.Name}" Header="Company" ... /> 

否则ToString()将被绑定对象上调用

+0

真!谢谢! – 2014-10-30 22:00:08

0

为了避免这种情况,我们通常实现的ToString(A类)我们所有的域对象。