我完全不熟悉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/