将数据绑定到DataGrid失败

时间:2014-10-30 21:44:39

标签: c# wpf

有人可以告诉我,为什么我无法在专栏公司(这里是公司名称)中收到预期的结果。在这里,我尝试将我的源数据(类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>

2 个答案:

答案 0 :(得分:1)

因为Company是一个类,您需要指定要绑定到的Company的哪个属性

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

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

答案 1 :(得分:0)

为避免这种情况,我们通常在所有域对象上实现ToString()。