2013-08-21 2 views
0

CommandPattern과 WPF를 모두 사용하는 코드를 가져와야합니다. 말하십시오. MVVM 패턴 코딩을 사용하고 있습니다. 그리고 저는 약간의 캐 먼 패턴을 사용해야합니다. 마찬가지로WPF로 CommandPattern

"MenuItem의 헤더 ="새 "HorizontalAlignment로 ="왼쪽 "너비 ="130 "명령 ="{바인딩 추가} ""

내 명령은 커맨드 패턴

+0

내 프로그램을 MVVM 패턴으로 작성하고 Command Pattern.I을 사용하여 명령 패턴의 Reciever, Invoker 클래스를 사용할 위치를 혼란스럽게 만들었습니다. 하지만 Garry Vass의 답변에 의하면 내 뷰 클래스는 호출자이고 ViewModels는 수신기 클래스라는 생각이 있습니다. 모든 사람의 제안에 감사드립니다. 나는 Garry Vass의 대답을 대답했다. – WpfBegnner

답변

4

의 구현을 사용하여 구현됩니다 명령 패턴 ... 같은 명령에 바인딩 항목을 선언

 <Menu DockPanel.Dock="Top"> 
      <MenuItem Header="file" Command="{Binding FileCommand}"/> 
     </Menu> 

을 ... 보일 것이다. 이 명령은 ...이 같은 선언보기 모델에 존재하는 것 ICommand의이 System.Windows.Input 네임 스페이스의 인터페이스로 선언

public ICommand FileCommand { get; set; } 

.... http://msdn.microsoft.com/en-us/library/system.windows.input.icommand.aspx

ICommand의 초기화하려면 ...

'RelayCommand가'클래스가 여기 발견 MVVM에 조쉬 스미스의 정액 문서에 설명이다
FileCommand = new RelayCommand(FileCommandExecute, FileCommandCanExecute); 

... : http://msdn.microsoft.com/en-us/magazine/dd419663.aspx 다른 구현 '프리즘의 같은 존재 DelegateCommand '. 생성자의 두 대표는 ...이 같은 'CanExecute'방법을 활성화하거나보기 모델의 상태에 따라 사용자의 표면에 명령을 비활성화

#region FileCommand callbacks 
    private bool FileCommandCanExecute(object obj) 
    { 
     return true; 
    } 
    private void FileCommandExecute(object obj) 
    { 
     OpenFile(); 
    } 
    #endregion // end of FileCommand callbacks 

을 ... 코딩. 그리고 'Execute'메서드는 실제 작업을 수행합니다.

이 예제는 명령 패턴의 전형적인 MVVM 구현입니다. 당신의 말에서, 명령을 구현 한보기 모델은 '수신자'이고 메뉴가 포함 된보기는 '호출자'입니다. 'CompositeCommand'및 'Attached Behavior'와 같은 명령 패턴의 최신 구현이 도입되었지만 이는 질문의 범위를 벗어납니다.

+0

내 의심을 해결해 주셔서 감사합니다. 특히 "당신의 말처럼, 명령을 구현 한보기 모델은 '수신자'이고 메뉴가 포함 된보기는 '호출자'입니다.".. 감사합니다. – WpfBegnner