现代UI WPF - 手动页面导航(来自ViewModel或View \ Control \ code-behind)

时间:2016-09-14 18:23:44

标签: wpf mvvm modern-ui navigationservice

我有一个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工作。

1 个答案:

答案 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);
            }
        }
    }