2014-10-30 3 views
0

Может кто-нибудь сказать мне, пожалуйста, почему я не могу получить желаемый результат в колонке Компания (здесь, название компании). Здесь я попытался связать свои исходные данные (класс Person) с WPF DataGrid.Не удалось передать данные 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

True !!! Спасибо! –

0

Чтобы избежать этого, мы обычно реализовать ToString() на все наши объекты домена.

Смежные вопросы