绑定 RelayCommand 时 WFP DataGrid CurrentCellChanged 中发生投射错误
Cast Error occured in WFP DataGrid CurrentCellChanged While on Binding a RelayCommand
内部异常消息:
无法将类型 'System.Reflection.RuntimeEventInfo' 的对象转换为类型 'System.Reflection.MethodInfo'
<DataGrid CurrentCellChanged="{Binding CallCommand}" AutoGenerateColumns="False" ItemsSource="{Binding MobileList, UpdateSourceTrigger=PropertyChanged}" SelectionUnit="FullRow" IsReadOnly="True">
<DataGrid.InputBindings>
<KeyBinding Key="C" Modifiers="Ctrl" Command="{Binding Path=DataContext.CopyToClipBoardCommand}" CommandParameter="{Binding }" />
</DataGrid.InputBindings>
<DataGrid.Columns>
<!--Column 1-->
<DataGridTextColumn Binding="{Binding MobileName}" Header="Name" />
<!--Column 2-->
<DataGridTextColumn Binding="{Binding MobileOS}" Header="OS" />
</DataGrid.Columns>
</DataGrid>
我的 RelayCommand 源代码:
public RelayCommand<KeyboardEventArgs> CallCommand
{
get
{
return new RelayCommand<KeyboardEventArgs>((selectedItem) =>
{
});
}
}
请帮助我,如何使用 MVVM 方法将 RelayCommand
绑定到 DataGrid 中的 CurrentCellChanged
属性?
请将事件命令绑定到CurrentCellChanged
属性。
使用 System.Windows.Interactivity.dll 来使用交互,它用于将命令绑定到事件,因此,您的 MVVM 模式没有违反。
在 Window/Usercontrol 的顶部,您必须为使用交互编写命名空间,
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
在这里,我放了一些 xaml 代码。
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding MobileList, UpdateSourceTrigger=PropertyChanged}"
SelectionUnit="FullRow" IsReadOnly="True" >
<DataGrid.InputBindings>
<KeyBinding Key="C" Modifiers="Ctrl" Command="{Binding Path=DataContext.CopyToClipBoardCommand}" CommandParameter="{Binding }" />
</DataGrid.InputBindings>
<i:Interaction.Triggers>
<i:EventTrigger EventName="CurrentCellChanged">
<i:InvokeCommandAction Command="{Binding Path=DataContext.CallCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<!--Column 1-->
<DataGridTextColumn Binding="{Binding MobileName}" Header="Name" />
<!--Column 2-->
<DataGridTextColumn Binding="{Binding MobileOS}" Header="OS" />
</DataGrid.Columns>
</DataGrid>
内部异常消息: 无法将类型 'System.Reflection.RuntimeEventInfo' 的对象转换为类型 'System.Reflection.MethodInfo'
<DataGrid CurrentCellChanged="{Binding CallCommand}" AutoGenerateColumns="False" ItemsSource="{Binding MobileList, UpdateSourceTrigger=PropertyChanged}" SelectionUnit="FullRow" IsReadOnly="True">
<DataGrid.InputBindings>
<KeyBinding Key="C" Modifiers="Ctrl" Command="{Binding Path=DataContext.CopyToClipBoardCommand}" CommandParameter="{Binding }" />
</DataGrid.InputBindings>
<DataGrid.Columns>
<!--Column 1-->
<DataGridTextColumn Binding="{Binding MobileName}" Header="Name" />
<!--Column 2-->
<DataGridTextColumn Binding="{Binding MobileOS}" Header="OS" />
</DataGrid.Columns>
</DataGrid>
我的 RelayCommand 源代码:
public RelayCommand<KeyboardEventArgs> CallCommand
{
get
{
return new RelayCommand<KeyboardEventArgs>((selectedItem) =>
{
});
}
}
请帮助我,如何使用 MVVM 方法将 RelayCommand
绑定到 DataGrid 中的 CurrentCellChanged
属性?
请将事件命令绑定到CurrentCellChanged
属性。
使用 System.Windows.Interactivity.dll 来使用交互,它用于将命令绑定到事件,因此,您的 MVVM 模式没有违反。
在 Window/Usercontrol 的顶部,您必须为使用交互编写命名空间,
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
在这里,我放了一些 xaml 代码。
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding MobileList, UpdateSourceTrigger=PropertyChanged}"
SelectionUnit="FullRow" IsReadOnly="True" >
<DataGrid.InputBindings>
<KeyBinding Key="C" Modifiers="Ctrl" Command="{Binding Path=DataContext.CopyToClipBoardCommand}" CommandParameter="{Binding }" />
</DataGrid.InputBindings>
<i:Interaction.Triggers>
<i:EventTrigger EventName="CurrentCellChanged">
<i:InvokeCommandAction Command="{Binding Path=DataContext.CallCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<!--Column 1-->
<DataGridTextColumn Binding="{Binding MobileName}" Header="Name" />
<!--Column 2-->
<DataGridTextColumn Binding="{Binding MobileOS}" Header="OS" />
</DataGrid.Columns>
</DataGrid>