C#/VB.NETでも使えるか試してみました。
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_;
};
}
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
どちらも問題なく動いてくれますね。
