WPF Datagrid: данные не отображаются - PullRequest
0 голосов
/ 19 ноября 2010

Может кто-нибудь сказать мне, почему в моей таблице данных WPF не отображаются данные со следующим кодом:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300"
    xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"
        >
    <Grid>
        <my:DataGrid Name="myDataGrid" ItemsSource="{Binding Customers}">
            <my:DataGrid.Columns>
                <my:DataGridTextColumn Header="Name" Binding="{Binding Name}" />
                <my:DataGridTextColumn Header="Name1" Binding="{Binding Name1}" />
            </my:DataGrid.Columns>
        </my:DataGrid>
    </Grid>
</Window>

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();

        IList<Customers> list = new List<Customers>();
        list.Add(new Customers() { Name = "Name1", Name2 = "Name2" });
        list.Add(new Customers() { Name = "Name1", Name2 = "Name2" });
        list.Add(new Customers() { Name = "Name1", Name2 = "Name2" });

        myDataGrid.DataContext = new Customers() { Name = "Name1", Name2 = "Name2" };
    }
}

public class Customers
{
    public string Name { get; set; }
    public string Name2 { get; set; }
}

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

Хорошо.Здесь есть ряд проблем.

  1. Вы устанавливаете DataContext как объект new Customers() вместо набора клиентов (а именно list)
  2. быть ItemsSource="{Binding}" для того, чтобы связать ItemsSource напрямую с DataContext, который будет коллекцией.
  3. Насколько я помню, DataGrid имеет AutoGenerateColumns, являющуюся true по умолчанию, поэтому4 колонки, 2 созданы вами и 2 автоматически сгенерированы.
0 голосов
/ 19 ноября 2010

В дополнение ко всему сказанному альфа-мышью, который был на деньгах ...

рассмотрите возможность сделать ваш контекст данных членом класса типа ObservableCollection:

public partial class Window1 : Window
{
  private ObservableCollection<Customers> customers;

  public Window1()
  {
      InitializeComponent();

      this.customers = new ObservableCollection<Customers>();

Использование ObservableCollection вместо List гарантирует, что изменения в содержимом коллекции будут автоматически приниматься сеткой без необходимости какого-либо NotifyPropertyChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...