我使用以下代码
Splat.Locator.Current.GetService(...)
获取视图模型的视图。但是此方法只允许将一个视图用于一个视图模型。但是我必须在多个视图中显示1个数据(视图模型)。 Splat.Locator是否有可能?
答案 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中对其进行分配