Использование WPF DataGrid с Reactivui - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь связать WPF DataGrid с ReactiveList. К сожалению, в связке нет ни одной строки.

Я также пытался использовать обычный список в качестве источника данных. Я также попробовал функцию AutoGenerateColumn и использовать привязку к свойствам (только геттеры, нет сеттеров) AuswertungsEntry. Но свойства никогда не были доступны во время выполнения.

My view.xaml:

...

<DataGrid x:Name="AuswertungGrid" Grid.Row="1">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Fehler" Binding="{Binding Name}"></DataGridTextColumn>
        <DataGridTextColumn Header=" 1. Auswertung" Binding="{Binding ok1}"></DataGridTextColumn>
        <DataGridTextColumn Header=" 1. Auswahl"></DataGridTextColumn>
        <DataGridTextColumn Header=" 2. Auswertung"></DataGridTextColumn>
        <DataGridTextColumn Header=" 2. Auswahlt"></DataGridTextColumn>
        <DataGridTextColumn Header=" Gesamt"></DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

Моя привязка в view.xaml.cs:

this.WhenActivated((d) =>
{                
    this.OneWayBind(ViewModel,
         viewModel => viewModel.Entries,
         view => view.AuswertungGrid.ItemsSource)
         .DisposeWith(d);
}

Моя ViewModel:

...
 private readonly ObservableAsPropertyHelper<ReactiveList<AuswertungsEntry>> _Entries;
 public ReactiveList<AuswertungsEntry> Entries => _Entries.Value;

 public AuswertungViewModel()
 {
    _Entries = this.WhenAnyValue(x => x.Data)
                   .Where(x => x != null)
                   .SelectMany(x => CreateDataSource())
                   .ToProperty(this, x => x.Entries);
 }

 public async Task<ReactiveList<AuswertungsEntry>> CreateDataSource()
 {
    return await AuswertungsService.GetAuswertung();
 }
...

Служба возвращает правильные данные. Я уже проверил это. Но строки не генерируются, ни с помощью функции GenerateAutoColumn, ни вручную.

Я ожидаю, что DataGrid будет заполнен предоставленными данными.

1 Ответ

0 голосов
/ 20 июня 2019

ReactiveList<T> устарела некоторое время назад в рамках проекта ReactiveUI.

Одна из проблем заключается в том, что он не генерирует события INotifyCollectionChanged так, как всегда ожидает WPF, особенно при добавлении значений на основе диапазона.

Я бы порекомендовал вам использовать SourceList<T>, если вам нужно изменить данные, или ObservableCollection<T> в противном случае.

...