2014-01-06 1 views
0

MainWindow 및 DataDetails 사용자 정의 컨트롤이 있습니다. DataDetails는 창의 오른쪽에 MainWindow를 내부에 표시되고 XAML을MainWindow 및 UserControl, 사용자 정의 컨트롤의 이벤트 처리

<Views:DataDetails /> 

MainWindow를을 사용하여 렌더링하고 DataDetails 모두 viewmodels를 사용하고 난 코드 숨김 그대로두고 싶다. 그래서 이벤트 처리를위한 명령을 사용하지만이 방법에 문제가 있습니다. MainWindow를에 이벤트가 제대로 작동 클릭 DataDetails에 같은 방법이 작동하지, 여기에 코드를입니다

MainWindow.xaml

... 
<Button Name="btnSearch" 
     Command="{Binding SearchByCommand, Mode=OneWay}"> Search </Button> 

MainWindowViewModel.cs

public ICommand SearchByCommand 
{ 
    get 
    { 
     if (_SearchByCommand == null) 
     { 
      _SearchByCommand = new RelayCommand(
       x => this.LoadData(this.SearchBy), 
       x => { return !string.IsNullOrEmpty(this.SearchText); } 
     ); 
     } 
     return _SearchByCommand; 
    } 
} 

LoadData 방법이 아닌 코드의 양을 줄이기 위해 여기에 표시된 것처럼 다시 MainWindow에서 작동합니다.

Inside MainWindow.xaml이 사용자 공간 컨트롤을 MainWindow 내부에 올바르게 표시 할 수 있도록이 네임 스페이스를 추가 한 window 태그 요소 안에 <Views:DataDetails />이라는 DataDetails 사용자 컨트롤을 추가했습니다. DataDetails 내부 명령 SaveDataCommand에 연결된 단추 클릭 이벤트가 있고 DataDetailsViewModel 내부에 명령이 있습니다.

DataDetails.xaml

<Button Name="btnSave" 
      Command="{Binding SaveDataCommand, Mode=OneWay}"> Save data</Button> 

DataDetailsViewModel는

public ICommand SaveDataCommand 
{ 
    get 
    { 
     _SaveDataCommand = new RelayCommand(
      x=>this.SaveData(), null); 
      return _SaveDataCommand; 
    }    
} 

다시이 방법 (위해 SaveData)는 코드의 양을 줄이기 위해 여기에 도시되어 있지 않다. 이 SaveDataCommand를 디버깅 할 때 절대로 버튼을 클릭하지 않으면 아무 일도 일어나지 않습니다. 여기서 내가 놓친 게 뭐야?

+0

여기서 DataDetails DataContext를 DataDetailsViewModel로 설정합니까? DataDetailsViewModel이 MainWindowViewModel의 속성입니까? – Fayilt

답변

1

중첩 된 사용자 정의 컨트롤에 바인딩되어야하는 VM을 어떻게 설정하고 있습니까? 보기 생성자에서?

<Views:DataDetails DataContext={Binding DataDetails} /> 

그리고 :이 작업을 수행 할 수있는 방법의 회전이있다, 나는 종종 사용했습니다 하나는 메인 VM에 속성으로 '세부 모델을 보려면'노출하고 적절하게 데이터 컨텍스트를 설정하는 것입니다 위의

물론
public DataDetailsViewModel DataDetails { get { return _dataDetailsViewModel; } } 

, 귀하의 세부 정보보기 당신은 데이터 컨텍스트를 설정할 수있는 여러 가지 방법이 많이가있는 한 많은 옵션 중 하나입니다 : 다음 주 VM은 속성이 있습니다.

관련 문제