Привязка DataGrid к списку в wpf - PullRequest
6 голосов
/ 13 ноября 2009

Я пытаюсь связать List с DataGrid. Вот фрагмент кода:

public class Parson
{
    public string LastName { get; set; }
    public string FirstName { get; set; }

    public Parson(string lastName, string firstName)
    {
        LastName = lastName;
        FirstName = firstName;
    }
}

public class Persons : List<Parson>
{
    // Parameterless constructor      
    public Persons()
    {
    }
    public new void Add(Person parson)
    {
        base.Add(parson);
    }
}  

код позади:

Persons persons = new Persons();
persons.Add(new Parson("New","Person");
dataGrid1.DataContext = persons;

XAML:

<my:DataGrid Name="dataGrid1" 
             xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" 
             CanUserAddRows="True" 
             ItemsSource="{Binding}" 
             AutoGenerateColumns="False">
    <my:DataGrid.Columns>
        <my:DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}"/>
        <my:DataGridTextColumn Header="Last Name" Binding="{Binding Path=LastName}"/>
    </my:DataGrid.Columns>
</my:DataGrid>

В результате отображается пустая сетка! Кто-нибудь знает почему?

Ответы [ 4 ]

5 голосов
/ 10 июля 2014

(Примечание. Этот ответ был проверен в .NET Framework v4.0):

Простая операция из 4 частей ...

  • сначала, на вашем элементе управления DataGrid в разметке XAML я рекомендую установить AutoGenerateColumns="False" (вы должны быть в состоянии сделать это вручную лучше, чем они могут сделать это автоматически)
  • секунда, в том же наборе управления ItemsSource="{Binding}", который сообщает сетке, что будет получать данные столбца и строки из источника, не определенного во время разработки.
  • в-третьих, создайте столбцы, чтобы они выглядели так, как вы хотите, и для каждой привязки к данным столбца что-то вроде Binding="{Binding Path=UniqueID}". Обратите внимание, что значение после Path интерполируется, поэтому учитывайте такие вещи, как чувствительность к регистру. Для списка <>, на который вы нацелены, значение, вероятно, будет одним из имен свойств объектов в вашем целевом списке <>. Промойте и повторите столько раз, сколько необходимо для каждого столбца в вашей DataGrid.
  • в-четвертых, в коде вашей формы, в конструкторе или во время загрузки формы или там, где это лучше всего соответствует вашим потребностям, установите DataContext вашей сетки. Это должно принять форму, похожую на {gridControlName}.DataContext = {target-List<>}

Когда форма загружена, ее сетка должна автоматически заполняться содержимым объектов в вашем списке <>.

5 голосов
/ 28 октября 2011

Попробуйте установить AutoGenerateColumns = true

1 голос
/ 13 ноября 2009

Попробуйте установить ItemsSource вместо DataContext и удалите ItemsSource={Binding} из своего XAML. Это может помочь.

Edit:

Я только что проверил некоторый написанный мной код, который использует тот же элемент управления DataGrid (WPF Toolkit), и я фактически устанавливаю ItemSource вместо DataContext. Если вам нужен пример, дайте мне знать.

0 голосов
/ 13 ноября 2009

В вашей DataGrid попробуйте:

ItemsSource="{Binding Path=.}"

Это сработало для меня.

...