もくじ
https://tera1707.com/entry/2022/02/06/144447#WinUI3
やりたいこと
前回の記事でNavigationView
を使って、WinUI3アプリの画面遷移を作った。
画面遷移ができたのはよいのだが、遷移するたびに、その画面のPage
のインスタンスが新しく作成されてるように見える。
例えば、前回作成したPageの中のLoadedイベントで、
private int ctr = 0; private void Page_Loaded(object sender, RoutedEventArgs e) { Debug.WriteLine("Page1 Loaded,"); count.Text = ctr++.ToString(); }
という感じでクラスのフィールドをカウントUPさせてみると、一度別画面に行って戻ってくると、またctrの値が0に戻っている。
これを、毎回0に戻らないようにしたい。つまり、Pageのインスタンスを毎回使わず、インスタンスを使いまわしたい。
(イメージは、WPFのprismのKeepAlive=true
で画面遷移したときの感じ)
やり方
Page
のNavigationCacheMode
の値をRequiredもしくはEnabledにする。
下記のようにすると、別ページに遷移した後戻ってきても、ctrが0に戻ることはない。
<Page x:Class="App3.BlankPage1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App3" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" NavigationCacheMode="Required" ★★←コレ Loaded="Page_Loaded"> <StackPanel> <Button Content="goto Page2" Width="100" Height="100" Click="Button_Click"/> <TextBlock Name="count" Text="0"/> </StackPanel> </Page>
参考
参考書
WinUI3
WinUI3でアプリを作ろうと思ったときのとっかかりによかった。
msdocsに書いてある情報を、体系的に、順番に読みたいな、というときによいかも。(ただし英語)
この本で分からなかった、かゆいところに手が届かなかった部分を私は記事にしてる感じ。
C#①
表紙に書いてある通り、教科書として最適。
これからC#を勉強したいけど、ネットだけで勉強するのは効率が悪いから体系的に学べる本が欲しいときや、
ちょっとC#を勉強してコード書けるようになったけど、もう少し広く深く知りたいなというときによいと思う。
私は仕事で触れるコードを軸に、基本ネットで断片的にC#を学んだので、その知識の隙間を埋めて枝葉を広げるためにとても分かりやすかった。
C#②
C#の文法的に色々できるのは分かったが、いざ実装するときに、わかったことを使ってどう実装すればいいのか?と悩んだときに指針になりそうな本。
「プロパティ等の名前の付け方、どうすればいい?」「情報をクラス外部に見せるときに、プロパティにすべき?メソッドにすべき?」「異常だと判定したいとき、どんなときにどんな例外をスローすべき?」などなど、勉強になる部分が山ほどあった。
私のように「コードは書くけどこれであってるのか自信がない、レビューで指摘されるのが嫌だ、実装時の(心の)よりどころが欲しい」という人に最適。