UWP-如何将页面的非null XamlRoot传递给与该页面关联的ViewModel调用的NavigationServ



在我的UWP应用程序MVVM实现中,我的ViewModels不知道它们的View。

我的ViewModels调用NavigationService.DisplayAlert()方法。我需要从与ViewModel关联的页面的AppWindow中显示ContentDialog

为此,我遵循该文档。我尝试将AppWindowXamlRoot传递给ViewModel。然而,无论我采用的AppWindow所使用的页面的UIElement是什么,它都有一个nullXamlRoot。为什么?

如何将我的AppWindowXamlRoot传递到它的ViewModel?

在我的导航服务:

public async Task DisplayAlert(string message, object existingElementXamlRoot)
{
var messageDialog = new ContentDialog
{
Title = "Message",
Content = message,
CloseButtonText = "Ok"
};
if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 8) && existingElementXamlRoot is XamlRoot xamlRoot) messageDialog.XamlRoot = xamlRoot;
await messageDialog .ShowAsync();
}

在我的BasePage:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
DataContext = e.Parameter;
((IBasePageViewModel) DataContext).XamlRoot = this.Content.XamlRoot;//I cannot find any UIElement with a non null XamlRoot
base.OnNavigatedTo(e);
}

您已经得到了预期的行为。Page.OnNavigatedTo(NavigationEventArgs(方法提到"在加载可视化树之前调用OnNavigated方法。"。

我建议你可以在页面的Loaded事件中这样做,效果很好。

最新更新