11using Codebreaker . ViewModels ;
2- using System . ComponentModel ;
2+ using Codebreaker . ViewModels . Messages ;
3+ using CommunityToolkit . Mvvm . Messaging ;
34
45namespace CodeBreaker . WinUI . Views . Components ;
56
6- public sealed partial class GameResultDisplay : UserControl
7+ public sealed partial class GameResultDisplay : UserControl , IRecipient < GameEndedMessage >
78{
89 public GameResultDisplay ( )
910 {
11+ WeakReferenceMessenger . Default . RegisterAll ( this ) ;
12+ WeakReferenceMessenger . Default . UnregisterAllOnUnloaded ( this ) ;
1013 InitializeComponent ( ) ;
1114 this . GoToState ( "Default" , false ) ;
1215 }
@@ -18,25 +21,8 @@ public GamePageViewModel ViewModel
1821 }
1922
2023 public static readonly DependencyProperty ViewModelProperty =
21- DependencyProperty . Register ( nameof ( ViewModel ) , typeof ( GamePageViewModel ) , typeof ( GameResultDisplay ) , new PropertyMetadata ( null , OnViewModelChanged ) ) ;
24+ DependencyProperty . Register ( nameof ( ViewModel ) , typeof ( GamePageViewModel ) , typeof ( GameResultDisplay ) , new PropertyMetadata ( null ) ) ;
2225
23- private static void OnViewModelChanged ( DependencyObject d , DependencyPropertyChangedEventArgs e )
24- {
25- var @this = ( GameResultDisplay ) d ;
26- @this . ViewModel . PropertyChanged += @this . OnViewModelPropertyChanged ;
27- }
28-
29- private void OnViewModelPropertyChanged ( object ? sender , PropertyChangedEventArgs args )
30- {
31- if ( args . PropertyName != nameof ( GamePageViewModel . GameStatus ) )
32- return ;
33-
34- var stateName = ViewModel . GameStatus switch
35- {
36- GameMode . Won => "Won" ,
37- GameMode . Lost => "Lost" ,
38- _ => "Default"
39- } ;
40- this . GoToState ( stateName ) ;
41- }
26+ public void Receive ( GameEndedMessage message ) =>
27+ this . GoToState ( message . IsVictory ? "Won" : "Lost" ) ;
4228}
0 commit comments