在 Microsoft.Toolkit.MVVM 下使用命令绑定的最佳方式是什么
What the best way to use command binding under Microsoft.Toolkit.MVVM
我在 doc 中使用 Microsoft.Toolkit.MVVM
我们可以使用绑定 Button
命令,例如:
<Button
Content="Click me!"
Command="{Binding ButtonClickCommand}"/>
但是对于 ListView
,我必须像 Behaviors
这样写,这段代码太长了:
<ListView>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding SelectionChangedCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListView>
那么为什么不能使用下面的代码呢?这很简单,但不起作用。
<ListView SelectionChanged={Binding SelectionChangedCommand}/>
简单的答案是对象的类型
在按钮 Command 中是 ICommand 并且在 ListView 中 SelectionChanged 是一个事件而不是 ICommand ,这就是为什么你需要使用 eventTrigger 这是一个“插件”
如果你从 MVVM 的角度来看,按钮在这里绑定一个命令,ListView 有 SelectedItems 集合,你可以绑定到它而不是事件,但这是你需要做出的更多选择(我认为一旦你习惯了你的代码看起来很好)
我在 doc 中使用 Microsoft.Toolkit.MVVM
我们可以使用绑定 Button
命令,例如:
<Button
Content="Click me!"
Command="{Binding ButtonClickCommand}"/>
但是对于 ListView
,我必须像 Behaviors
这样写,这段代码太长了:
<ListView>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding SelectionChangedCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListView>
那么为什么不能使用下面的代码呢?这很简单,但不起作用。
<ListView SelectionChanged={Binding SelectionChangedCommand}/>
简单的答案是对象的类型 在按钮 Command 中是 ICommand 并且在 ListView 中 SelectionChanged 是一个事件而不是 ICommand ,这就是为什么你需要使用 eventTrigger 这是一个“插件”
如果你从 MVVM 的角度来看,按钮在这里绑定一个命令,ListView 有 SelectedItems 集合,你可以绑定到它而不是事件,但这是你需要做出的更多选择(我认为一旦你习惯了你的代码看起来很好)