从实现InterfaceClass?</interfaceclass>的类VM中使用IViewFor <interfaceclass>查找视图

时间:2015-01-22 22:31:30

标签: mvvm reactiveui

我有以下类,这是我的视图模型(现在这很简单,但最终会包含更多逻辑块):

    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调用)。如果可能,我很乐意避免这种情况!

非常感谢!

1 个答案:

答案 0 :(得分:0)

那么,为什么不这样做:

Locator.CurrentMutable.Register(() => new TalkView(), typeof(IViewFor<ITalk>));