Splat.Locator一个ViewModel的多个视图

时间:2019-09-04 13:42:42

标签: c# uwp reactiveui

我使用以下代码

 Splat.Locator.Current.GetService(...) 

获取视图模型的视图。但是此方法只允许将一个视图用于一个视图模型。但是我必须在多个视图中显示1个数据(视图模型)。 Splat.Locator是否有可能?

2 个答案:

答案 0 :(得分:3)

Register()和GetService()具有合约参数,您可以将其用作获取所需实现的键。

示例,其中“ giveMeBar” /“ giveMeBaz”是合同参数的值:

using System;
using Splat;

namespace ConsoleApp1
{
    internal class Program
    {
        private static void Main()
        {
            // Register
            Locator.CurrentMutable.Register(() => new Bar(), typeof(IFoo), "giveMeBar");
            Locator.CurrentMutable.Register(() => new Baz(), typeof(IFoo), "giveMeBaz");

            // Resolve
            var bar = Locator.Current.GetService<IFoo>("giveMeBar");
            var baz = Locator.Current.GetService<IFoo>("giveMeBaz");

            // Which types did we get?
            Console.WriteLine(bar);
            Console.WriteLine(baz);
            Console.ReadLine();

            // Outputs:
            // ConsoleApp1.Bar
            // ConsoleApp1.Baz
        }        
    }

    internal interface IFoo { }
    internal class Bar : IFoo { }
    internal class Baz : IFoo { }
}

答案 1 :(得分:2)

我认为这是不可能的,因为当您首先使用ViewModel导航时,Locator会感到困惑,因此它将始终实例化与ViewModel相关联的最新视图。我的建议是,您可以将ViewModel创建为基类,并创建另一个继承该ViewModel的ViewModel,然后像往常一样在Splat.Locator中对其进行分配