2017-11-03 7 views
0

우리는 3 개의 저장 게임 중 하나를 선택할 WPF 응용 프로그램의 한 페이지가있는 프로젝트를 만들고 다음 페이지로 이동합니다. 첫 번째 페이지에서 두 번째 페이지로로드하는 GameInstance를 전달하는 방법을 알고 싶습니다.MVVM을 사용하여 WPF의 한 페이지에서 다른 페이지로 필드를 전달합니다.

우리는 이미 코드 비하인드에서 이것을 구현했지만, MVVM 아키 텍처를 사용하고 있기 때문에 코드 뒤에 로직을 갖고 싶지 않습니다. 우리가 알고 싶은 어떤 창

public SaveGameWindow() 
{ 
    InitializeComponent(); 
} 

private void LoadGame1_Click(object sender, RoutedEventArgs e) 
{ 
    var comb = new SaveGameViewModel(); 
    comb.LoadGame1(); 
    this.NavigationService.Navigate(comb.TempCombatWindow); 
} 

private void LoadGame2_Click(object sender, RoutedEventArgs e) 
{ 
    var comb = new SaveGameViewModel(); 
    comb.LoadGame2(); 
    this.NavigationService.Navigate(comb.TempCombatWindow); 
} 

private void LoadGame3_Click(object sender, RoutedEventArgs e) 
{ 
    var comb = new SaveGameViewModel(); 
    comb.LoadGame3(); 
    this.NavigationService.Navigate(comb.TempCombatWindow); 
} 

에게 절약의 뒤에

코드는 위와 같은 일을 구현하는 방법이지만, 게임 저장을위한 우리의 ViewModel있다.

페이지를 변경하면 NavigationService를 사용하지만 ViewModel에서는 사용할 수 없으며이 속성을 ViewModel과 바인딩하여 찾을 수있는 방법이 없습니다. 따라서 어떤 종류의 대리자를 사용할 수 있습니다.

나는 그 질문이 혼란스럽지 않기를 바란다.

답변

0

보기 모델에서 ICommand 및 명령 매개 변수를 사용하고 이벤트를 사용하여이 작업을 수행 할 수 있습니다. 명령에 like this one 인터페이스를 구현할 수 있습니다. 당신의보기 모델에서

  • 인터페이스를 구현하고이 같은 함수를 만듭니다

    private void LoadGame(object parameter) { switch (parameter.ToString()) { case "1": LoadGame1(); break; case "2": LoadGame2(); break; case "3": LoadGame3(); break; } ComabtWindowHandler(); }

  • 핸들러는 뒤에 코드에서 구현 될 이벤트 핸들러 될 것입니다. 하지만 먼저 당신이 하나의 같은 ICommand의 필요 :

    public ICommand Load { get { RelayCommand<object> load= new RelayCommand<object((parameter) => LoadGame(parameter)); return load; } }

이 속성은 사용자의 저장 버튼의 명령 속성 안에 당신의 XAML에서 바인딩됩니다.

핸들러를 들어
  • 먼저보기 모델의 추상 이벤트 핸들러를 선언 당신이 처리 할 것이다 단지 delagate를 추가하려면보기 모델을로드 자신의 메인 창에서 public EventHandler ComabtWindowHandler;

  • ,

    comb.ComabtWindowHandler += delegate { this.NavigationService.Navigate(comb.TempCombatWindow); };

  • : 이벤트, 그래서이 코드 조각을 추가 (의 빗이 당신의 ViewModel의 인스턴스라고 가정하자) 0
  • 마지막으로 xaml에서 3 버튼 bind 명령에서 CommandParameter 속성을 정의합니다 (예제에서 명령 매개 변수는 간단히 "1"또는 "2"또는 "3"입니다). 물론 버튼 1에는 매개 변수 = "1"ecc ...)가 있지만 더 복잡한 작업을 수행 할 수 있습니다.

+0

매력처럼 작동합니다. 고마워요. –