2013-04-26 140 views
4

我有一个WPF应用程序,我试图实现MVVM。主窗口具有视图模型和自定义用户控件。此用户控件包含一个文本框和一个按钮,并从主父窗口共享数据上下文。一切都很好...WPF,MVVM和嵌套UserControl的事件处理

我已经能够将文本框绑定到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> 
+0

我不认为Click属性应该使用Binding这个词,就像Click =“OnClick” – 2013-04-26 20:55:29

回答

5

您应该使用按钮Command代替,并在您的视图模型的ICommand财产。

Click属性期望在代码隐藏文件中的方法,该方法不能“绑定到”OnClick。因此,无论是使用Command,还是仅从按钮被单击时应调用的.xaml.cs文件中输入方法名称。

+0

谢谢!这工作! – mrtedweb 2013-04-27 01:29:18

+0

很奇怪:Click事件可以绑定到UWP应用程序中的视图模型的方法! – benichka 2017-09-06 11:50:41