c# - 如何在特定条件下更改属性时使 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);
但我想为此添加一些附加条件。
我只想在Deleted
从false
转到时选择值true
。
谁能告诉我该怎么办,谢谢!!!
完整的流程是:
我有一个带有数据源的列表框,并且数据源行具有属性Deleted
。单击 的删除按钮后SelectedItem
,我对数据库进行了一些操作,并通过将 更改为SelectedItem.Deleted
来刷新列表框数据源true
。整个过程和我想要的一样。
但最后,当我选择列表框的另一个项目时,它会刷新,因为Deleted
更改为false
. 由于这次刷新,我必须再次选择该项目。
所以我希望它仅在Deleted
从更改false
为时触发true
解决方案
只是为了有需要的人,我通过以下方式解决了它:
_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;
为了触发一次,以便能够观察到后续的变化。
推荐阅读
- php - 在 WooCommerce 结帐页面上删除登录表单(和注册)
- datetime - 如何将 YYYYMM 转换为日期时间?
- javascript - 如何知道异步 forEach 何时完成
- c# - EPiserver:ICurrentPage 没有 ContentLink 的定义
- c# - 如何处理 d.elementFromPoint 不是函数?
- c# - Crystal Report - 无法登录到 DB c#
- php - Seldaek/monolog “没有带有 DeduplicationHandler 的文件或目录”
- java - 无法从 Spring Boot 的 RestController 检索到 Angular 6 服务的对象
- swift - 谁以正确的方式实施 ISO8601?斯威夫特还是春天?
- android - 弹出菜单很奇怪