首页 > 解决方案 > 如何在特定条件下更改属性时使 ReactiveUI Select

问题描述

我在 WPF 中使用 ReactiveUI 并且我有一个绑定到的列表框SearchResults

现在我想在SearchResults两个属性中的任何一个发生更改时进行更改,所以我这样做了

_searchResults = this.WhenAnyValue(x => x.SearchTerm, x => x.SelectedItem.Deleted)
                .Select(item => item)
                .Select(item => SearchProjects(item.Item1))
                .ObserveOn(RxApp.MainThreadScheduler)
                .ToProperty(this, x => x.SearchResults);

但我想为此添加一些附加条件。

我只想在Deletedfalse转到时选择值true

谁能告诉我该怎么办,谢谢!!!

完整的流程是:

我有一个带有数据源的列表框,并且数据源行具有属性Deleted。单击 的删除按钮后SelectedItem,我对数据库进行了一些操作,并通过将 更改为SelectedItem.Deleted来刷新列表框数据源true。整个过程和我想要的一样。

但最后,当我选择列表框的另一个项目时,它会刷新,因为Deleted更改为false. 由于这次刷新,我必须再次选择该项目。

所以我希望它仅在Deleted从更改false为时触发true

标签: c#wpfreactive-programmingreactiveui

解决方案


只是为了有需要的人,我通过以下方式解决了它:

_searchResults = this.WhenAnyValue(x => x.SearchTerm)
                .CombineLatest(this.WhenAnyValue(x => x.SelectedItem.Deleted)
                                   .Buffer(2, skip: 1)
                                   .Where(item => item[1] == true))
                .Select(item => item.First)
                .Select(item => SearchProjects(item))
                .ObserveOn(RxApp.MainThreadScheduler)
                .ToProperty(this, x => x.SearchResults);

SelectedItem.Deleted = true;

或者

_searchResults = this.WhenAnyValue(x => x.SearchTerm)
                .CombineLatest(this.WhenAnyValue(x => x.SelectedItem.Deleted)
                                   .Buffer(2))
                .Select(item => item.First)
                .Select(item => SearchProjects(item))
                .ObserveOn(RxApp.MainThreadScheduler)
                .ToProperty(this, x => x.SearchResults);

SelectedItem.Deleted = true;

SelectedItem.Deleted = true;为了触发一次,以便能够观察到后续的变化。


推荐阅读