Привязка WPFDataGrid к ObservableCollection - PullRequest
0 голосов
/ 20 сентября 2018

Я привязываю WPF DataGrid к наблюдаемой коллекции.

В Xaml у меня есть

<DataGrid x:Name="DGSnapshot"
              ItemsSource="{Binding Source=Snapshot}"
              Grid.Row="1"
              Margin="20,45,20,-46"
              AutoGenerateColumns="True">
</DataGrid>

Это добавляет восемь строк в сетку, точное количество букв в слове Snapshot,Однако нет данных из Обсервабильной коллекции.Когда я отлаживаю программу, она показывает, что DGSnapshot.ItemsSource = "Snapshot"

Но если я введу это в коде

public MainWindow()
{
    InitializeComponent();
    DGSnapshot.ItemsSource = Snapshot;
}

, то привязка сработает.Когда я отлаживаю, DGGrid.ItemsSource показывает список данных.

Поэтому мой вопрос: почему не работает привязка в коде Xaml, а в коде C #?

Имеет ли онесть что-то связанное с необходимостью

<Windows.Resources Something here/>

В коде Xaml?

Я прочитал следующие посты, но все еще не могу понять это

Привязка ObservableCollection к сетке данных wpf: Сетка остается пустой

Привязка столбца данных к StaticResource, указывающему на ObservableCollection в WPF

Как связать таблицу данных WPF сObservableCollection

Мой полный код C # ...

public partial class MainWindow : Window
{
    public ObservableCollection<SnapshotRecord> Snapshot = new ObservableCollection<SnapshotRecord>()
    {
        new SnapshotRecord(){Cell1="Testing", Cell2 = "WPF", Cell3="Data", Cell4="Binding"},
        new SnapshotRecord(){Cell1="Stack", Cell2="Overflow", Cell3="is", Cell4="Awesome"}
    };

    public MainWindow()
    {
        InitializeComponent();
        DGSnapshot.ItemsSource = Snapshot;
    }
}

public class SnapshotRecord
{
    public string Cell1 { get; set; }
    public string Cell2 { get; set; }
    public string Cell3 { get; set; }
    public string Cell4 { get; set; }
}

1 Ответ

0 голосов
/ 20 сентября 2018

Вы не можете привязать к общедоступному полю .Вы можете привязать только к свойству .

public ObservableCollection<SnapshotRecord> Snapshot { get; set; } = new ObservableCollection<SnapshotRecord>()
{
    new SnapshotRecord() {Cell1 = "Testing", Cell2 = "WPF", Cell3 = "Data", Cell4 = "Binding"},
    new SnapshotRecord() {Cell1 = "Stack", Cell2 = "Overflow", Cell3 = "is", Cell4 = "Awesome"}
};

Также, если вы хотите инициализировать вашу коллекцию во время запуска, вы должны пересмотреть ваш текст данных.Самый простой:

public MainWindow()
{
    InitializeComponent();
    DataContext = this;
}

Еще одна проблема - ваш XAML.Вам не нужно указывать источник.Измените его на

 ItemsSource="{Binding Snapshot}"
...