Skip to content

Commit 2324905

Browse files
committed
Made ScrollViewer automatically scroll to last move
1 parent 00a2ed2 commit 2324905

2 files changed

Lines changed: 45 additions & 8 deletions

File tree

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using CommunityToolkit.Mvvm.Messaging;
2+
3+
namespace Codebreaker.WPF.Helpers;
4+
5+
internal static class PageExtensions
6+
{
7+
public static void UnregisterAllOnUnloaded(this IMessenger messenger, FrameworkElement page) =>
8+
messenger.UnregisterAllOnUnloaded(page, page);
9+
10+
public static void UnregisterAllOnUnloaded(this IMessenger messenger, FrameworkElement page, object messageRecepient)
11+
{
12+
void UnloadedCallback(object sender, RoutedEventArgs args)
13+
{
14+
messenger.UnregisterAll(messageRecepient);
15+
page.Unloaded -= UnloadedCallback;
16+
}
17+
18+
page.Unloaded += UnloadedCallback;
19+
}
20+
21+
public static void CallOnceOnUnloaded(this FrameworkElement page, Action<object, RoutedEventArgs> action)
22+
{
23+
void Callback(object sender, RoutedEventArgs args)
24+
{
25+
action?.Invoke(sender, args);
26+
page.Unloaded -= Callback;
27+
}
28+
29+
page.Unloaded += Callback;
30+
}
31+
}
Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
11
using Codebreaker.ViewModels.Contracts.Services;
2+
using Codebreaker.WPF.Helpers;
3+
using CommunityToolkit.Mvvm.Messaging;
24

35
namespace Codebreaker.WPF.Views.Pages;
46

5-
public partial class GamePage : Page
7+
public partial class GamePage : Page, IRecipient<GameMoveMessage>
68
{
79
private readonly INavigationService _navigationService;
810

911
public GamePage()
1012
{
1113
ViewModel = App.Current.GetService<GamePageViewModel>();
1214
_navigationService = App.Current.GetService<INavigationService>();
13-
1415
DataContext = this;
15-
1616
InitializeComponent();
17-
18-
//WeakReferenceMessenger.Default.Register<GameStateChangedMessage>(this, (r, m) =>
19-
//{
20-
// VisualStateManager.GoToElementState(MainGrid, m.GameMode.ToString(), true);
21-
//});
17+
WeakReferenceMessenger.Default.Register(this);
18+
WeakReferenceMessenger.Default.UnregisterAllOnUnloaded(this);
2219
}
2320

2421
public GamePageViewModel ViewModel
@@ -34,4 +31,13 @@ private async void Button_Click(object sender, RoutedEventArgs e)
3431
{
3532
await _navigationService.NavigateToAsync("TestPage");
3633
}
34+
35+
public void Receive(GameMoveMessage message)
36+
{
37+
if (message.GameMoveValue is not GameMoveValue.Completed)
38+
return;
39+
40+
pegScrollViewer.UpdateLayout();
41+
pegScrollViewer.ScrollToBottom();
42+
}
3743
}

0 commit comments

Comments
 (0)