我正在尝试使用Unity和Prism将我的ShellPage的Dispatcher注入到我的ViewModel中。因为在创建shell之后调度程序可用,所以我无法及时注册调度程序 第一步:
protected override Task OnInitializeAsync(IActivatedEventArgs args)
{
[...]
Container.RegisterInstance<IResourceLoader>(resourceLoader);
其次,将执行CreateShell方法。
protected override UIElement CreateShell(Frame rootFrame)
{
var shell = Container.Resolve<ShellPage>();
Container.RegisterType<MyViewModel>(new InjectionProperty(nameof(MyViewModel.Dispatcher), shell.Dispatcher));
虽然我将Dispatcher注入MyViewModel到属性Dispatcher为null。也许我需要在MEF中重新组合一些东西?如何在MyViewModel中实现属性注入?
答案 0 :(得分:0)
我认为不可能。 不支持像MEF那样重新组合。
简单的方法是创建一个帮助程序来获取当前视图的Dispatcher并在ViewModels中使用它
此示例适用于Windows 8,但您可以将其用于UWP应用
当我使用这种方法时,我对UWP应用做了一些小改动:
在app.xaml.cs中的Onlaunched事件
我在另一个地方添加了UIDispatcher。
if (rootFrame.Content == null)
{
// When the navigation stack isn't restored navigate to the first page,
// configuring the new page by passing required information as a navigation
// parameter
UIDispatcher.Initialize();
rootFrame.Navigate(typeof(MainPage), e.Arguments);
}
// Ensure the current window is active
Window.Current.Activate();