如果我有以下视图模型:
代理将与主题连接起来,如下所示。
注意,WhenAny 是一个用于订阅 INPC 事件的 ReactiveUI 助手。但是,接下来我需要生成一个绑定并通过标记扩展返回它。我知道我想做什么,但无法弄清楚标记扩展魔法如何将所有内容组合在一起。
class Foo : INotifyPropertyChanged {
ISubject<string> Name { ... }
}
还有一些想象中的XAML代码
<TextBox Text="{my:Subscribe Path=Name}/>
我希望双向绑定的行为是这样的
- 当UI中的文本框被更新时,Subject.onNext被调用
- 通过订阅Subject.Subscribe来更新文本框
由于WPF只直接支持INPC,我的想法是通过标记扩展在中创建一个代理INPC对象
class WPFSubjectProxy : INotifyPropertyChanged{
string Value { ... }
}
代理将与主题连接起来,如下所示。
subject.Subscribe(v=>proxy.Value=v);
proxy
.WhenAny(p=>p.Value, p.Value)
.Subscribe(v=>subject.OnNext(v))
注意,WhenAny 是一个用于订阅 INPC 事件的 ReactiveUI 助手。但是,接下来我需要生成一个绑定并通过标记扩展返回它。我知道我想做什么,但无法弄清楚标记扩展魔法如何将所有内容组合在一起。