绑定RelayCommand时,WFP DataGrid CurrentCellChanged中发生强制转换错误

本文关键字:错误 转换 CurrentCellChanged RelayCommand WFP DataGrid 绑定 | 更新日期: 2023-09-27 18:30:01

内部异常消息:无法将"System.Reflection.RuntimeEventInfo"类型的对象强制转换为"System.Refraction.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属性。

绑定RelayCommand时,WFP DataGrid 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>
相关文章: