2010-04-06 5 views
2

저는 WPF에 익숙하지 않고 올바른 방법으로 MVV를 구현하려고 시도했습니다. 저는 조쉬 스미스가 자주 언급 한 기사를 사용했습니다. 그리고 제가 아는 바를 깨닫게 해주는 것 말고는 제게 다소 혼란 스럽습니다.WPF의 relaycommand from usercontrol

특히 RelayCommand 개체를 사용하여 페이지의 단추를 직접 처리하는 페이지가 있습니다. 이것은 괜찮습니다. 그러나 버튼 (저장)은 궁극적으로 다른 버튼을 포함하는 사용자 정의 컨트롤에 있으며 컨트롤은 여러 페이지에서 사용됩니다.

내 질문은 이것입니다. 사용자 정의 컨트롤에서 명령을 포함하는 페이지 (예 : viewmodel)로 명령을 전달하는 방법은 무엇입니까? 나는 사용자 정의 컨트롤의 명령

public ICommand SaveCommand 
{ 
    get 
    { 
    if (_saveCommand == null) 
    { 
     _saveCommand = new RelayCommand(
      param => this.Save(), 
      param => this.CanSave 
     ); 
    } 
    return _saveCommand; 
    } 
} 

에 결합하는 경우에, 나는 사실 내가 뷰 모델에 처리되어야 할 때, 사용자 컨트롤 자체에 저장 방법을 사용해야합니다.

아무도 도와 줄 수 있습니까?

답변

0

그래서 부모 (페이지) DataContext (viewmodel)에 바인딩해야합니까? RelativeSource를 사용하여 SaveCommand에 바인딩 해보십시오. http://msdn.microsoft.com/en-us/library/ms743599.aspx

+0

고마워요! 누군가가 관심이있는 경우에는 다음과 같이 수행 할 수 있습니다. Command = "{바인딩 SaveCommand}" CommandParameter = "{RelativeSource FindAncestor, AncestorType = {x : Type UserControl}}" – pilsdumps

0

시도해보십시오. one. 그것은 당신에게 바인딩과 릴레이 명령이라는 용어를 많이 도움이 될 것입니다.

염려에 따라 사용자 정의 컨트롤의 데이터 인터페이스를 바인딩해야합니다. 저장 명령에 버튼을 사용하려는 경우. 이것을 시도하십시오 :

<Grid x:Name="LayoutRoot" DataContext="{ yourViewModelHere }"> 
     <Button x:Name="btnSave" Command="{Binding SaveCommand}"/> 
</Grid> 
+0

"ONE"링크가 작동하지 않습니다. 그 중 하나가 작동합니까? –