现代 UI WPF - 手动页面导航(来自 ViewModel 或 View\Control\code-behind)
Modern UI WPF - Manual Page Navigation (from ViewModel or View\Control\code-behind)
我有一个 MVVM 应用程序,我正在尝试迁移到现代 UI,但我似乎无法弄清楚导航服务...
基本上,我的 ViewModel 是一个带有 "AddItem" 方法的 ObservableCollection,作为 ICommand
。执行此方法时,我想切换回第一个 MUI 组的第一个 Link\Page,这里是现代 UI WPF 的示例片段...
<mui:ModernWindow ...>
<mui:ModernWindow.MenuLinkGroups>
<mui:LinkGroup DisplayName="Open Work">
<mui:LinkGroup.Links>
<mui:Link DisplayName="Current Activity" Source="/Pages/ActivityPage.xaml" />
<mui:Link DisplayName="Activity Queue" Source="/Pages/Queue.xaml" />
</mui:LinkGroup.Links>
</mui:LinkGroup>
<mui:LinkGroup DisplayName="Search" >
<mui:LinkGroup.Links>
<mui:Link DisplayName="Customers" Source="/Pages/SearchPage.xaml" />
</mui:LinkGroup.Links>
</mui:LinkGroup>
</mui:ModernWindow.MenuLinkGroups>
所以基本上,从"SearchPage.xaml"开始,执行了ICommand "AddItem",我想立即切换回"ActivityPage.xaml"(在"Open Work"组)。
理想情况下,我想从 ViewModel 执行此操作,但我不介意将处理程序附加到 CollectionChanged
事件,并手动设置页面,但 NavigationService 示例(here) 没帮我解决这个问题...
作为最后的手段,我从 Nuget 添加了 MVVM Light,并尝试在我的 ViewModel 中实现 IModernNavigationService,但我不知道如何让 ViewModelLocator 工作。
找到答案了。比我想象的要简单得多。
在我的 ModernWindow 代码隐藏中,我将以下处理程序添加到 CollectionChanged
事件:
private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if(e.NewItems.Count > 0)
{
try
{
ContentSource = MenuLinkGroups.First().Links.First().Source;
}
catch (Exception error)
{
ModernDialog.ShowMessage(error.Message, FirstFloor.ModernUI.Resources.NavigationFailed, MessageBoxButton.OK);
}
}
}
我有一个 MVVM 应用程序,我正在尝试迁移到现代 UI,但我似乎无法弄清楚导航服务...
基本上,我的 ViewModel 是一个带有 "AddItem" 方法的 ObservableCollection,作为 ICommand
。执行此方法时,我想切换回第一个 MUI 组的第一个 Link\Page,这里是现代 UI WPF 的示例片段...
<mui:ModernWindow ...>
<mui:ModernWindow.MenuLinkGroups>
<mui:LinkGroup DisplayName="Open Work">
<mui:LinkGroup.Links>
<mui:Link DisplayName="Current Activity" Source="/Pages/ActivityPage.xaml" />
<mui:Link DisplayName="Activity Queue" Source="/Pages/Queue.xaml" />
</mui:LinkGroup.Links>
</mui:LinkGroup>
<mui:LinkGroup DisplayName="Search" >
<mui:LinkGroup.Links>
<mui:Link DisplayName="Customers" Source="/Pages/SearchPage.xaml" />
</mui:LinkGroup.Links>
</mui:LinkGroup>
</mui:ModernWindow.MenuLinkGroups>
所以基本上,从"SearchPage.xaml"开始,执行了ICommand "AddItem",我想立即切换回"ActivityPage.xaml"(在"Open Work"组)。
理想情况下,我想从 ViewModel 执行此操作,但我不介意将处理程序附加到 CollectionChanged
事件,并手动设置页面,但 NavigationService 示例(here) 没帮我解决这个问题...
作为最后的手段,我从 Nuget 添加了 MVVM Light,并尝试在我的 ViewModel 中实现 IModernNavigationService,但我不知道如何让 ViewModelLocator 工作。
找到答案了。比我想象的要简单得多。
在我的 ModernWindow 代码隐藏中,我将以下处理程序添加到 CollectionChanged
事件:
private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if(e.NewItems.Count > 0)
{
try
{
ContentSource = MenuLinkGroups.First().Links.First().Source;
}
catch (Exception error)
{
ModernDialog.ShowMessage(error.Message, FirstFloor.ModernUI.Resources.NavigationFailed, MessageBoxButton.OK);
}
}
}