mvvm - MVVM:在Windows 8中使用键盘处理列表项导航

标签 mvvm windows-8 keyboard navigation mvvm-light

我完全不熟悉Windows 8开发,现在遇到使用MVVM Light混合触摸和键盘导航的问题。

所以,我有个 View 模型的列表,在网格 View 和只要选择其中的一个,导航到选定的 View 模型被激活。触摸或鼠标都可以很好地工作,但是使用键盘可能会造成困惑。确实,自然的行为是当我要显示项目时使用箭头导航列表并按Enter,但是在这里,当仅使用箭头键更改项目时,导航将被激活,这确实使用户感到困惑。

那么,如何通过触摸和鼠标以及组合选择和键盘输入键来激活导航呢?

这是我使用的代码。

ViewModel:

public ReleaseViewModel SelectedRelease
{
    get
    {
        return selectedRelease;
    }
    set
    {
        if(selectRelease != value)
        {
            selectedRelease = value;
        }

        // Navigation code here
    }
}

看法:
<GridView
    ItemsSource="{Binding Releases}"
    ItemTemplate="{StaticResource ReleaseTemplate}"
    ItemContainerStyle="{StaticResource GridViewItemStyle}"
    Grid.ColumnSpan="2"
    Grid.Row="2"
    Padding="116,0,40,46"
    SelectedItem="{Binding SelectedRelease, Mode=TwoWay}"/>

最佳答案

我认为,使用MVVM模式进行编码并不意味着应该在模型中完成所有与代码相关的事情。与UI行为相关的操作(如导航)仍应通过使用控件中的可用事件在 View (后置代码)中完成。像GridView的事件一样,鼠标和键盘事件也是如此。

许多人可能对此并不认同,但是在WPF和Silverlight中使用MVVM模式工作了几年之后,我必须说UI行为( View )与控件的逻辑/功能(模型)之间的良好结合,您还将被迫将一些仅与用户界面相关的内容放到背后的代码中。至少,这是我的看法。

您可以做的是创建一个继承GridView的类(我们称之为MyDataGrid)。
然后,您可以使用OnKeyDown覆盖并在按Enter时使导航进入vertica。
实际上,您可以按照自己的意愿使MyDataGrid外观和表现为“开箱即用”,因此,如果要在应用程序(或另一个应用程序)中的另一个位置使用相同的网格行为,则无需额外的代码。

关于mvvm - MVVM:在Windows 8中使用键盘处理列表项导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13893091/

相关文章:

c# - 如何访问 KnownFolders.DocumentsLibrary

wpf - MahApps 和 Catel MVVM

silverlight - 使用 MVVM 定期更新 silverlight View

winapi - win32 CreateFile2 api调用的目的是什么?

python - 在 Windows 8 上安装 Google Cloud SDK 时遇到问题

iphone - 触发 "return"后防止键盘退出?

c - GLUT 无法正确检测到超过 2 个按键?

android - 隐藏或移除 CardIO Scann 屏幕上的键盘按钮 (Android)

android - 无法创建 AndroidViewModel 的实例

vb.net - MVVM 与设计时数据的绑定(bind)在设计时正常工作,但在运行时不能正常工作