我有以下类,这是我的视图模型(现在这很简单,但最终会包含更多逻辑块):
public class IndicoTalk : ITalk
{
private Talk _talk;
public IndicoTalk(Talk t)
{
this._talk = t;
}
public string Title
{
get { return _talk.Title; }
}
}
现在,我对这个人有一个反应性的观点:
public sealed partial class TalkView : UserControl, IViewFor<ITalk>
{
public TalkView()
{
this.InitializeComponent();
this.Bind(ViewModel, x => x.Title, y => y.TalkTitle.Text);
}
请注意,IViewFor适用于ITalk,而非IndicoTalk。这是因为我可以进行其他类型的谈话,并且它们都符合相同的观点。
我在我的App启动中注册了这个ViewModel:
Locator.CurrentMutable.Register(() => new TalkView(),
typeof(IViewFor<IWalker.DataModel.Inidco.IndicoMeetingRef.IndicoTalk>));
最后,在另一个视图模型中,我有一个ReactiveList,其中包含一堆这些IndicoTalks。当然,当我将它绑定到ListBox时,ReactiveUI无法找到该视图。如果我切换到IViewFor,那么一切正常。
在这种情况下,轻轻地重定向视图分辨率的正确方法是什么?
中途解决方案:让所有代码保持相同,但放入IViewFor ITalk而不是IndicoTalk。这有效,但意味着我必须向每个从ITalk继承的ViewModel注册Splat(上面的CurrentMutable调用)。如果可能,我很乐意避免这种情况!
非常感谢!
答案 0 :(得分:0)
那么,为什么不这样做:
Locator.CurrentMutable.Register(() => new TalkView(), typeof(IViewFor<ITalk>));