跳到主要内容
版本:11.0.0

绑定到已排序/过滤的数据

应用程序常见的UI任务之一是显示已排序和/或过滤的数据视图。在Avalonia中,可以通过将SourceCache<TObject, TKey>SourceList<T>连接到ReadOnlyObservableCollection<T>并绑定到该集合来实现。

创建Source Cache

SourceCache<TObject, TKey>SourceList<T>来自于ReactiveUI中的Dynamic Data。示例:

// (x => x.Id) 用作缓存的唯一键的属性
private SourceCache<TestViewModel, Guid> _sourceCache = new (x => x.Id);

然后,可以通过AddOrUpdate方法来填充_sourceCache

创建已排序或过滤的视图

接下来,可以将ReadOnlyObservableCollection<T>绑定到已过滤或已排序的_sourceCache。排序/过滤类似于linq。

private readonly ReadOnlyObservableCollection<TestViewModel> _testViewModels;
public ReadOnlyObservableCollection<TestViewModel> TestViewModels => _testViewModels;
...
public MainWindowViewModel(){
// 通过_sourceCache.AddOrUpdate填充源缓存
...
_sourceCache.Connect()
// 根据OrderIndex属性进行升序排序
.Sort(SortExpressionComparer<TestViewModel>.Ascending(t => t.OrderIndex))
.Filter(x => x.Id.ToString().EndsWith('1'))
// 绑定到我们的ReadOnlyObservableCollection<T>
.Bind(out _testViewModels)
// 订阅更改
.Subscribe();
}

绑定

现在,_sourceCache已创建并填充,ReadOnlyObservableCollection<T>已创建并绑定,我们可以像通常使用ObservableCollection<T>一样在视图中进行绑定。

    <Design.DataContext>
<vm:MainWindowViewModel/>
</Design.DataContext>

<TreeView ItemsSource="{Binding TestViewModels}">
<TreeView.DataTemplates>
<!-- DataTemplate Definitions -->
</TreeView.DataTemplates>
</TreeView>