在我的UWP应用程序MVVM实现中,我的ViewModels不知道它们的View。
我的ViewModels调用NavigationService.DisplayAlert()
方法。我需要从与ViewModel关联的页面的AppWindow
中显示ContentDialog
。
为此,我遵循该文档。我尝试将AppWindow
XamlRoot传递给ViewModel。然而,无论我采用的AppWindow
所使用的页面的UIElement
是什么,它都有一个null
XamlRoot。为什么?
如何将我的AppWindow
XamlRoot传递到它的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
事件中这样做,效果很好。