読者です 読者をやめる 読者になる 読者になる

Rodhos Soft

備忘録を兼ねた技術的なメモです。

バインドしておいてコードから変更を通知する。

Windowsストアアプリ最初の一歩 WinRT

どうもこんにちは続いてバインドしておいてコードで変化があったら通知するやりかたです。
ボタンを押すと、テキストを変化させ、その変化がUI側にPropertyChangedとして通知されテキストが変化します。

    public class Moo : INotifyPropertyChanged
    {
        private string txt;
        public string Txt
        {
            set
            {
                this.txt = value;
                this.PropertyChanged(this, new PropertyChangedEventArgs("Txt"));

            }
            get
            {
                return txt;
            }
        }

       public  Moo()
        {
            this.txt = "moo";
        }

       public event PropertyChangedEventHandler PropertyChanged;
    }

このようにINotifyPropertyChangedとしてPropertyChangedを実装しといて、値がセットされたときに変わったよと呼び出すわけです。

        <TextBlock 
                    HorizontalAlignment="Center"
                   VerticalAlignment="Center"
                   DataContext="{StaticResource moo}"
                   Text="{Binding Txt}" 
                   />
        <Button Content="Button" 
                HorizontalAlignment="Left" 
                Margin="930,378,0,0" 
                VerticalAlignment="Top" 
                Click="Button_Click"
                
                />

ここではBindしていることでその変わったよイベントを監視しています。

    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            moo.Txt = "pop";
        }


    }

ボタンをおすことで、テキストがセットされるコードを置きました。


Bindingは値の変化したよ通知を監視して自動でUIを変更してくれるのがポイントです。この変わったよ通知自体はどこでだすかはコード側で指定する必要があったというわけです。ここでは値がsetされるところで呼んでいます。