【发布时间】:2018-12-27 11:43:48
【问题描述】:
我在我的应用 NavigationView 中用作主控件,并且在页面加载的地方有 Frame。
<NavigationView x:Name="MyNavView" IsBackButtonVisible="Collapsed" SelectionChanged="{x:Bind ViewModel.OnSelectionChanged}" PaneDisplayMode="Top">
<NavigationView.MenuItems>
<NavigationViewItem Icon="Contact" Content="Contact" Tag="MasterDetailPage"/>
<NavigationViewItem Icon="Favorite" Content="Favorites" Tag="FavoritesPage"/>
</NavigationView.MenuItems>
<Frame x:Name="RootFrame"/>
</NavigationView>
有两个事件 SelectionChanged 和 ItemInvoked 可用于实现导航到在 RootFrame(我的框架名称)中加载的页面。但我想用 Command 来制作 MVVM。而且我还没有找到 NavigationView 本身或 NavigationViewItem 的 Command 属性。之后我在 ViewModel 中处理了 SelectionChanged 事件,但在我看来它与 MVVM 相矛盾。
那么,如何使用 Command 制作 MVVM?如果没有这样的机会,请告诉如何实现 MVVM 本身不处理事件。
【问题讨论】:
-
FWIW,如果您在视图中处理选择更改事件,它仍然符合 MVVM,它只是将适当的信息转发到 ViewModel 上的方法。无需过度复杂化任何事情。
-
您已经在代码隐藏中引用了您的 ViewModel 以便使用 x:Bind,所以我想不出任何理由为什么您不能只使用代码隐藏事件处理程序.这并不违反 MVVM,甚至一点也不违反。也就是说,Xaml 行为可能可以做你想做的事。
-
你是赖特@SeanO'Neil,这种行为使我能够做我要做的事情。我使用来自thisnuget 包的EventToCommand 使用Command 制作了MVVM。
标签: c# mvvm uwp navigation