2013-04-26 2 views
4

WPF 응용 프로그램이 있고 MVVM을 구현하려고합니다. 기본 창에는보기 모델과 사용자 지정 사용자 정의 컨트롤이 있습니다. 이 사용자 정의 컨트롤은 텍스트 상자와 버튼을 포함하고 있으며, 메인 부모 윈도우와 데이터 인터페이스를 공유합니다. 모두 좋다 ...중첩 된 UserControls에 대한 WPF, MVVM 및 이벤트 처리

나는 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을 :

<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 속성이 Click이라는 단어를 사용해야한다고 생각하지 않습니다. Click = "OnClick" –

답변

5

대신 버튼을 Command를 사용하고 뷰 모델에 ICommand 속성을 가지고 있어야 여기

은 몇 가지 예제 코드입니다.

속성에 Click 속성은 코드 숨김 파일에서 OnClick에 "바인딩"할 수없는 메서드를 필요로합니다. 따라서 Command를 사용하거나 버튼을 클릭 할 때 호출해야하는 .xaml.cs 파일의 메서드 이름 만 입력하십시오.

+0

감사합니다! 그게 효과가 있었어! – mrtedweb

+0

이상하게도 Click 이벤트는 UWP 앱에서 뷰 모델의 메서드에 바인딩 될 수 있습니다! – benichka