2010-04-04 4 views
1

WPF 프로젝트에서 MVVM을 사용하고 있습니다. 이제 누군가가 버튼을 누를 때 서브 윈도우를 표시하려고합니다. 이를 고전적으로 표현하기 위해 Show() 메서드를 호출합니다. 내 응용 프로그램을 유지하기 위해 지금 원하는 것은 하위 윈도우의 Show() 함수에 버튼을 바인딩하는 것입니다.컨트롤의 "function"호출

버튼 클릭 (메뉴 클릭 등)이 항상 허용되는 것은 아니기 때문에 명령을 실행할 수 있는지 평가하는 사용자 지정 명령을 작성했습니다. 그러나, 나는 그 컨트롤의 기능을 깨끗한 방법으로 호출하는 방법을 찾지 못했습니다. 이것은 고전적인 스타일 (프론트 엔드의 코드)을 수행하는 요점입니까?

편집 (코드를 포함하는)

XAML :

 <MenuItem Foreground="White" Header="File"> 
      <MenuItem Header="Login" Background="#FF444444" Command="{Binding Dialog.ApplicationLoginCommand}" /> 
      <MenuItem Header="Logout" Background="#FF444444" Command="{Binding Dialog.ApplicationLogoutCommand}" /> 
      <MenuItem Header="Exit" Background="#FF444444" Command="{Binding Dialog.ApplicationShutdownCommand}" /> 
     </MenuItem> 

C 번호 : 하나의 명령이 다른 프론트 엔드에 고유 한 이후

public class ApplicationDisplayLoginCommand : ICustomCommand { 
    private MyViewModel _ViewModel = null; 

    public ApplicationDisplayLoginCommand(MoneyManagementViewModel vm) { 
     _ViewModel = vm; 
    } 

    #region ICustomCommand Members 

    public event CustomCommandExecutedDelegate CustomCommandExecuted; 

    #endregion 

    #region ICommand Members 

    public bool CanExecute(object parameter) { 
     return ! _ViewModel.IsLoggedIn; 
    } 

    public event EventHandler CanExecuteChanged { 
     add { 
     CommandManager.RequerySuggested += value; 
     } 
     remove { 
     CommandManager.RequerySuggested -= value; 
     } 
    } 

    public void Execute(object parameter) { 
     if (null != CustomCommandExecuted) { 
     CustomCommandExecuted(); 
     } 
      _ViewModel.Login(); 
    } 
} 

ICustomCommand, 그냥 이벤트를 추가하려면 ICommand의 상속 명령이 다르게 동작해야합니다.

에만 속성에, 방법에 바인딩 할 수 없습니다

-sa

+0

사용자 정의 명령을 어떻게 지정 했습니까? 이 작업을 수행 할 수있는 방법이 많이 있으므로 몇 가지 코드를 보여주십시오. – Heinzi

+0

수정 됨. 더 필요한 경우 물어보십시오. – Sascha

답변

1

HTH. ViewModel에서 새 창을 열어야하는 경우 Josh Smith가 this article을 살펴보십시오. 서비스 로케이터를 사용하여 메시지 상자를 표시하는 방법을 보여줍니다. 코드를 쉽게 적용하여 모든 창을 표시 할 수 있습니다.

+0

기능이 좋고 멋진 기사가 링크됩니다. – Sascha

관련 문제