Привязка WPF DataGrid к свойству в подклассе - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь понять, как правильно связать столбец таблицы данных с данными в подклассе. Чтобы прояснить ситуацию, я сделал небольшой пример, который, если его решить, очень помог бы заставить работать код.

Вот классы, определенные:

public class SubItem
    {
        public string Data { get; set; }
    }

public class Item
    {
        public int Value { get; set; }
        public SubItem Data { get; set; }
    }

Затем я создаю Наблюдаемая коллекция выглядит следующим образом:

public class IntData : ObservableCollection<Item>
    {
        public IntData() : base()
        {
            Item i = new Item() { Value = 56, Data = new SubItem() { Data = "testdata" } };
            Add(i);
        }
    }

А вот мой код MainWindow:

public partial class MainWindow : Window
    {
        public IntData Integers { get; set; }

        public MainWindow()
        {
            Integers = new IntData();

            InitializeComponent();
            dataGrid1.ItemsSource = Integers; // This is an important line
        }
    }

Код XAML остается простым:

<DataGrid Name="dataGrid1" AutoGenerateColumns="False" Margin="12">
   <DataGrid.Columns>
      <DataGridTextColumn Header="Integers" Binding="{Binding Value}"/>
      <DataGridTextColumn Header="Data" Binding="{Binding Data}"/>
   </DataGrid.Columns>
</DataGrid>

enter image description here

Запустив вышеизложенное, вы заметите, что целые числа работают должным образом, но не столбец данных. Любые идеи от кого-то, как сделать так, чтобы в этом столбце отображалось свойство Data? Заранее спасибо!

1 Ответ

0 голосов
/ 01 мая 2020

Самый простой способ исправить это - переопределить ToString() метод в SubItem классе и вернуть Data свойство

public class SubItem
{
    public string Data { get; set; }

    public override string ToString()
    {
        return Data;
    }
}

Другой вариант - обновить DataGridTextColumn привязку и использовать Data sub -свойство Data свойства из Item класса (вам, вероятно, потребуется обновить имя:))

<DataGridTextColumn Header="Data" Binding="{Binding Data.Data}"/>

Более сложный вариант - использовать DataGridTemplateColumn и определить собственный шаблон для представления данные

<DataGridTemplateColumn Header="Data">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Data.Data}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...