4
如果我有以下视图模型标记扩展结合ISubject <string>
class Foo : INotifyPropertyChanged {
ISubject<string> Name { ... }
}
和一些想象的XAML代码
<TextBox Text="{my:Subscribe Path=Name}/>
祝双向绑定的行为是
- Subject.onNext当文本框在UI中更新时调用
- 文本框通过订阅Subject.Subscribe
由于WPF更新只支持直接INPC我的想法是通过标记扩展
class WPFSubjectProxy : INotifyPropertyChanged{
string Value { ... }
}
代理在创建代理INPC对象 将连入主题为这样
subject.Subscribe(v=>proxy.Value=v);
proxy
.WhenAny(p=>p.Value, p.Value)
.Subscribe(v=>subject.OnNext(v))
注WhenAny是ReactiveUI
帮手订阅 INPC事件。
但是,然后我需要生成绑定并通过标记扩展返回 。
我知道我想要做什么,但无法弄清楚标记扩展魔术把它放在一起。
我添加了一个解决方案,以显示我想出了答案上结合ISubject到一个可变的特性。它的工作到目前为止:) – bradgonesurfing
嗨,我真的很喜欢你的解决方案,但我有一个问题:在运行时我总是得到一个空的DataContext,因为使用Caliburn.Micro的WindowManager首先创建视图,然后附加ViewModel,因此MarkupExt被解析在View获得它的DataContext之前。你知道任何解决方法来解决这个问题吗?谢谢你,兄弟! – Sergio
是的,我有一个解决方案。我现在使用它的一个变量来监听datacontext的变化。我会在星期一去找。如果我不发布,请在这里再次ping我。 – bradgonesurfing