将 WPF DataGrid 与 Reactivui 结合使用
Using a WPF DataGrid with Reactivui
我正在尝试将 WPF DataGrid 绑定到 ReactiveList。不幸的是,绑定不显示任何行。
我也尝试使用普通列表作为数据源。
我还尝试了 AutoGenerateColumn 函数并使用绑定到 AuswertungsEntry 的属性(只有 getter,没有 setter)。
但是这些属性在运行时从未被访问过。
我的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);
}
我的视图模型:
...
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 会填充提供的数据。
ReactiveList<T>
不久前在 ReactiveUI 项目中被弃用。
其中一个问题是它不会以 WPF 始终期望的方式生成 INotifyCollectionChanged 事件,尤其是当您添加基于范围的值时。
如果您需要改变数据,我建议您使用 SourceList<T>
,否则使用 ObservableCollection<T>
。
我正在尝试将 WPF DataGrid 绑定到 ReactiveList。不幸的是,绑定不显示任何行。
我也尝试使用普通列表作为数据源。 我还尝试了 AutoGenerateColumn 函数并使用绑定到 AuswertungsEntry 的属性(只有 getter,没有 setter)。 但是这些属性在运行时从未被访问过。
我的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);
}
我的视图模型:
...
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 会填充提供的数据。
ReactiveList<T>
不久前在 ReactiveUI 项目中被弃用。
其中一个问题是它不会以 WPF 始终期望的方式生成 INotifyCollectionChanged 事件,尤其是当您添加基于范围的值时。
如果您需要改变数据,我建议您使用 SourceList<T>
,否则使用 ObservableCollection<T>
。