多个 .WhenAny(...).ToPropertyEx(...) 调用是否应该相互覆盖?
Should multiple .WhenAny(...).ToPropertyEx(...) calls overwrite one another?
我有一个对象有两个 WhenAnyValues
:
this.WhenAnyValue(x => x.SomeInt)
.Select(x => "Bar" + x)
.ToPropertyEx(this, x => x.SomeString);
this.WhenAnyValue(x => x.SomeInt)
.Select(x => "Foo" + x)
.ToPropertyEx(this, x => x.SomeString);
使用 1-4 作为输入进行测试产生:
1
Foo0
Foo1
2
Foo2
3
Foo3
4
Foo4
交换 WhenAnyValue
方法的顺序,使 Bar 排在最后,结果仅触发 Bars。所以似乎后来的 WhenAnyValue
以某种方式覆盖了第一个。这是错误还是预期的行为?如果这是一个错误,这是来自 ReactiveUI 版本 16.3.10。
如果项目过滤时也会出现此问题,例如,Foo 仅设置为偶数,而 Bar 仅设置为奇数。你仍然只会得到最后一个被调用的WhenAnyValue
。
Foo0是延迟执行造成的,与此问题无关
问题不在于 WhenAnyValue()
调用,它可以在同一个 属性 上多次使用,并且它们中的每一个都会单独触发观察值变化。问题是 ToPropertyEx()
调用或它重定向到的基础 ToProperty()
调用。
ToProperty()
或ToPropertyEx()
的要点是为特定目标属性(此处SomeString
)构建价值订阅。它将配置订阅并在值更改时触发 PropertyChanged
事件。 getter 你的 SomeString
属性 将链接到一个生成的 ObservableAsPropertyHelper<T>
实例,或者使用
这样的显式代码
public string SomeString => this.someString.Value;
(其中 this.someString
属于 ObservableAsPropertyHelper<string>
类型)
或使用 Reactive.Fody
库的属性 [ObservableAsProperty]
,如
[ObservableAsProperty]
public string SomeString {get;}
只能配置一个“getter”,它是来自“Bar”订阅或“Foo”订阅的 ObservableAsPropertyHelper
版本。请记住,生成的 PropertyChangedEvent
事件不包含实际值,仅包含更改的 属性 名称。订阅者必须从某个地方获取值,他们使用 属性.
的 getter
我有一个对象有两个 WhenAnyValues
:
this.WhenAnyValue(x => x.SomeInt)
.Select(x => "Bar" + x)
.ToPropertyEx(this, x => x.SomeString);
this.WhenAnyValue(x => x.SomeInt)
.Select(x => "Foo" + x)
.ToPropertyEx(this, x => x.SomeString);
使用 1-4 作为输入进行测试产生:
1
Foo0
Foo1
2
Foo2
3
Foo3
4
Foo4
交换 WhenAnyValue
方法的顺序,使 Bar 排在最后,结果仅触发 Bars。所以似乎后来的 WhenAnyValue
以某种方式覆盖了第一个。这是错误还是预期的行为?如果这是一个错误,这是来自 ReactiveUI 版本 16.3.10。
如果项目过滤时也会出现此问题,例如,Foo 仅设置为偶数,而 Bar 仅设置为奇数。你仍然只会得到最后一个被调用的WhenAnyValue
。
Foo0是延迟执行造成的,与此问题无关
问题不在于 WhenAnyValue()
调用,它可以在同一个 属性 上多次使用,并且它们中的每一个都会单独触发观察值变化。问题是 ToPropertyEx()
调用或它重定向到的基础 ToProperty()
调用。
ToProperty()
或ToPropertyEx()
的要点是为特定目标属性(此处SomeString
)构建价值订阅。它将配置订阅并在值更改时触发 PropertyChanged
事件。 getter 你的 SomeString
属性 将链接到一个生成的 ObservableAsPropertyHelper<T>
实例,或者使用
public string SomeString => this.someString.Value;
(其中 this.someString
属于 ObservableAsPropertyHelper<string>
类型)
或使用 Reactive.Fody
库的属性 [ObservableAsProperty]
,如
[ObservableAsProperty]
public string SomeString {get;}
只能配置一个“getter”,它是来自“Bar”订阅或“Foo”订阅的 ObservableAsPropertyHelper
版本。请记住,生成的 PropertyChangedEvent
事件不包含实际值,仅包含更改的 属性 名称。订阅者必须从某个地方获取值,他们使用 属性.