我有一个MVVM应用程序,我试图转移到现代UI,但我似乎无法弄清楚导航服务...
基本上,我的ViewModel是一个带有" AddItem"的ObservableCollection。方法,作为ICommand
。执行此方法时,我想切换回第一个MUI组的第一个链接\页面,这是一个现代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>
所以基本上,来自&#34; SearchPage.xaml&#34;,ICommand&#34; AddItem&#34;执行,我想立即切换回&#34; ActivityPage.xaml&#34; (在&#34; Open Work&#34;组中)。
理想情况下,我希望从ViewModel执行此操作,但我不介意将Handler附加到CollectionChanged
事件,并手动设置Page,但NavigationService示例({ {3}})没有帮助我解决这个问题......
作为最后的手段,我添加了Nuget的MVVM Light,并尝试在我的ViewModel中实现IModernNavigationService,但我无法弄清楚如何让ViewModelLocator工作。
答案 0 :(得分:0)
找到答案。比我想象的要简单得多。
在我的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);
}
}
}