だるろぐ

明日できることは、今日しない。

UWP:一定時間が経過すると勝手に消えるメッセージを実装する

画面に「保存しました」っていうメッセージを出したいけれど、いつまでも表示されてるのも鬱陶しいので、たとえば3秒後に消したい、みたいな。

public class MainPageViewModel : BindableBase
{
    private string message = string.Empty;

    public string Message
    {
        get { return message; }
        set { SetProperty(ref message, value); }
    }

    private void ShowMessage(string message)
    {
        Message = message;

        var timer = new DispatcherTimer()
        {
            Interval = TimeSpan.FromSeconds(3),
        };

        timer.Tick += (e, args) => { Message = string.Empty; };

        timer.Start();
    }
}

とにかく DispatcherTimer というのを使うと、遅延タスクみたいなのを実装できるみたい。Message プロパティの setter に処理をぶち込んでもいいかも? どういう書き方がキレイな書き方なのかまだよくわかんないな。上級者は ReactibeExtension みたいなのを使いこなして、スッキリ書いちゃうのかもしれないが……。

あと、ほんとは XAML だけでできればカッコいいのだろうけれど、自分には無理だった。

で、テキトーに作ってみてから思ったのだけど、こういうのはユーザーコントロールにしておけばよさげだよね。というわけで、次回はユーザーコントロールでも作ってみる。