C# 使用MVVM在UWP中处理ListView项单击的最佳实践
我需要在使用MVVM的UWP中双击C# 使用MVVM在UWP中处理ListView项单击的最佳实践,c#,listview,events,mvvm,uwp,C#,Listview,Events,Mvvm,Uwp,我需要在使用MVVM的UWP中双击ListView,打开一个新视图(项目详细信息)。在WPF中,我使用了带参数的命令和EventTrigger,但Microsoft不建议在UWP中使用它: 触发器、EventTrigger、Actions和BeginStoryboard不常用。这些API主要是为了与最初用于Microsoft Silverlight的XAML兼容而存在的……对于控件模板中的事件,请使用可视状态和VisualStateManager 据我所知,当您需要更改控件的可视状态,但我需要打
ListView
,打开一个新视图(项目详细信息)。在WPF中,我使用了带参数的命令和EventTrigger
,但Microsoft不建议在UWP中使用它:
触发器、EventTrigger、Actions和BeginStoryboard不常用。这些API主要是为了与最初用于Microsoft Silverlight的XAML兼容而存在的……对于控件模板中的事件,请使用可视状态和VisualStateManager
据我所知,当您需要更改控件的可视状态,但我需要打开一个新视图时,将使用此选项。如何使用
VisualStateManager
以下是我的XAML在WPF中的外观:
<ListBox x:Name="PersonsListControl" Grid.RowSpan="3" Grid.Row="0" Grid.Column="2"
ItemsSource="{Binding Path=PersonsProvider}"
ItemsPanel="{StaticResource PersonsListPanelTemplate}"
ItemTemplate="{StaticResource PersonsListItemTemplate}"
SelectedItem="{Binding SelectedPerson}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction
Command="{Binding GetPersonDetailsCommand}"
CommandParameter="{Binding SelectedPerson}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>
在UWP中,您可以使用
{x:Bind…}
:
<ListBox ...
DoubleTapped="{x:Bind HandleDoubleTapped}" />
参考文献:编辑:
@JörgenSigvardsson指出,
x:Bind
不直接绑定到DataContext
,您应该创建一个代理属性来访问页面中的特定数据。关于这方面的更多信息可以阅读但这不是MVVM,是吗?是的。您正在将
EventHandler
绑定到ViewModel
中指定的方法。它是由Microsoft自己推荐的。{x:Bind}
默认情况下不绑定到viewmodel(DataContext
)。它绑定到页面。如果你想让它成为MVVM,你必须将viewmodel作为一个属性公开,然后点进viewmodel,例如,{x:Bind viewmodel.property}
@JörgenSigvardsson我刚刚在MSDocs上读到了这一点,但没有意识到这一点被改变了。谢谢你的澄清。
public void HandleDoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
// your logic
}