C# 嵌套用户控件的WPF、MVVM和事件处理

C# 嵌套用户控件的WPF、MVVM和事件处理,c#,.net,wpf,xaml,mvvm,C#,.net,Wpf,Xaml,Mvvm,我有一个WPF应用程序,我正在尝试实现MVVM。主窗口有一个viewmodel和一个自定义用户控件。此用户控件包含一个文本框和一个按钮,并共享主父窗口中的datacontext。一切都很好 我已经能够将文本框绑定到viewmodel中的一个变量,并且它成功地工作了。但是在我的一生中,我无法将事件处理程序从按钮绑定到viewmodel。我一直收到以下错误: Unable to cast object of type 'System.Reflection.RuntimeEventInfo' to t

我有一个WPF应用程序,我正在尝试实现MVVM。主窗口有一个viewmodel和一个自定义用户控件。此用户控件包含一个文本框和一个按钮,并共享主父窗口中的datacontext。一切都很好

我已经能够将文本框绑定到viewmodel中的一个变量,并且它成功地工作了。但是在我的一生中,我无法将事件处理程序从按钮绑定到viewmodel。我一直收到以下错误:

Unable to cast object of type 'System.Reflection.RuntimeEventInfo' to type 'System.Reflection.MethodInfo'.
我知道这是MVVM新手的常见问题。我浏览过网络,但似乎什么都没用。谁能解释我到底做错了什么

以下是一些示例代码: 主窗口:

<Window x:Class="Mvvm.View.MainWindowView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:view="clr-namespace:ZeeZor.Kiosk.Mvvm.View"
        WindowStyle="None"
        WindowState="Maximized" >
    <Grid >
        <view:ControlPanelView
            Margin="5, 0, 5, 0"
            HorizontalAlignment="Stretch"
            VerticalAlignment="Stretch" >
        </view:ControlPanelView>            
    </Grid>
</Window>

用户控制:

<UserControl x:Class="Mvvm.View.ControlPanelView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <TextBlock Grid.Row="0" TextAlignment="Right" Text="{Binding Total}" Margin="0,5,20,5" />
        <Button Grid.Row="1" Content="Test" Click="{Binding Path=OnClick}" Width="220" Height="100"/>
    </Grid>
</UserControl>

您应该改为在按钮上使用,并且在ViewModel中具有
ICommand
属性


Click
属性要求代码隐藏文件中有一个方法,不能“绑定到”OnClick。因此,要么使用命令,要么只键入.xaml.cs文件中的方法名称,单击按钮时应调用该文件。

我认为Click属性不应使用绑定这个词,就像Click=“OnClick”非常奇怪:Click事件可以绑定到UWP应用程序中视图模型的方法!