gpt4 book ai didi

c# - 多个 .WhenAny(...).ToPropertyEx(...) 调用是否应该相互覆盖?

转载 作者:行者123 更新时间:2023-12-02 18:26:05 25 4
gpt4 key购买 nike

我有一个带有两个 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 出现在最后,导致仅触发 Bar。因此,后面的 WhenAnyValue 似乎以某种方式覆盖了第一个。这是一个错误还是有意的行为?如果这是一个错误,这是来自 ReactiveUI 版本 16.3.10。

如果项目被过滤,例如,Foo 仅设置为偶数,Bar 仅设置为奇数。您仍然只能得到最后被调用的 WhenAnyValue

Foo0 是由于延迟执行造成的,与此问题无关。

最佳答案

问题不在于 WhenAnyValue()调用,它可以在同一属性上多次使用,并且每次调用都会分别触发观察到的值变化。问题是ToPropertyEx()看涨或标的ToProperty()称其为重定向至。

ToProperty()的要点或ToPropertyEx()是为特定目标属性构建值订阅(此处 SomeString )。它将配置订阅并触发 PropertyChanged值变化事件。您的 SomeString 的 setter/getter 属性将链接到生成的 ObservableAsPropertyHelper<T>实例,或者使用显式代码,例如

public string SomeString => this.someString.Value;

(其中 this.someString 的类型为 ObservableAsPropertyHelper<string> )或使用属性 [ObservableAsProperty] Reactive.Fody的类似图书馆

[ObservableAsProperty]
public string SomeString {get;}

只能配置一个“getter”,它可以是 ObservableAsPropertyHelper从您的“Bar”订阅或“Foo”订阅构建。请记住,生成的 PropertyChangedEvent事件不携带实际值,仅携带更改的属性名称。订阅者必须从某个地方获取值,并且他们使用该属性的 getter。

关于c# - 多个 .WhenAny(...).ToPropertyEx(...) 调用是否应该相互覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70129169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com