SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

C++/CX: Windows Runtime Componentをつくる

 C#/VB.NETでも使えるか試してみました。

CounterViewModel.cs
using System.Windows.Input;
using System.ComponentModel;

namespace CounterApp_CS {

    public sealed class CounterViewModel : INotifyPropertyChanged {
        public CounterViewModel() {
            counter_ = new CounterComponent.Counter();
        }

        public event PropertyChangedEventHandler PropertyChanged;
        public int Count { get { return counter_.Get(); } }

        public ICommand Increment  { get { return new Common.RelayCommand( () => { do_inc(); }); } }
        public ICommand Decrement  { get { return new Common.RelayCommand( () => { do_dec(); }); } }

        private void do_inc() {
            int curr = counter_.Get(); 
            counter_.Increment(); 
            if ( curr != counter_.Get() ) { 
                RaisePropertyChanged("Count"); 
            } 
        }

        private void do_dec() {
            int curr = counter_.Get(); 
            counter_.Decrement(); 
            if ( curr != counter_.Get() ) { 
                RaisePropertyChanged("Count"); 
            } 
        }

        private void RaisePropertyChanged(string propertyName) {
            if ( PropertyChanged != null ) {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        private CounterComponent.Counter counter_;    
    };
}
CounterViewModel.vb
Imports System.Windows.Input
Imports System.ComponentModel

    NotInheritable Class CounterViewModel
        Implements INotifyPropertyChanged
        Public Sub New()
            counter_ = New CounterComponent.Counter()
        End Sub

        Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged

        Public ReadOnly Property Count() As Integer
            Get
                Return counter_.Get()
            End Get
        End Property

        Public ReadOnly Property Increment() As ICommand
            Get
                Return New Common.RelayCommand(Sub()
                    do_inc()
                                               End Sub)
            End Get
        End Property
        Public ReadOnly Property Decrement() As ICommand
            Get
                Return New Common.RelayCommand(Sub()
                    do_dec()
                                               End Sub)
            End Get
        End Property

        Private Sub do_inc()
            Dim curr As Integer = counter_.Get()
            counter_.Increment()
            If curr <> counter_.Get() Then
                RaisePropertyChanged("Count")
            End If
        End Sub

        Private Sub do_dec()
            Dim curr As Integer = counter_.Get()
            counter_.Decrement()
            If curr <> counter_.Get() Then
                RaisePropertyChanged("Count")
            End If
        End Sub

        Private Sub RaisePropertyChanged(propertyName As String)
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
        End Sub

        Private counter_ As CounterComponent.Counter
    End Class

 どちらも問題なく動いてくれますね。

次のページ
step6:ちょっと気の利いたコンポーネント

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

επιστημη(エピステーメー)

C++に首まで浸かったプログラマ。Microsoft MVP, Visual C++ (2004.01~2018.06) "だった"りわんくま同盟でたまにセッションスピーカやったり中国茶淹れてにわか茶...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7541 2013/12/26 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー