MVVM
https://gyazo.com/76345c4c0a25ba0db198e5bf9189b8e1
Model
アプリケーションのデータやロジックを表現する.
asRagi.iconロジックは表現しないかも.
ViewModel
ViewとModelのつなぎの部分.
INotifyPropertyChangedを継承することでイベントをViewに通知する.
code:ViewModel.cs
public class MyViewModel : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
private string _hello = "Hello, World!";
public string Hello
{
get => _hello;
set {
if (_hello != null) {
_hello = value;
OnPropertyChanged();
}
}
}
public void OnPropertyChanged(
CallerMemberName string name = "")
=> PropertyChanged?.Invoke(
this,
new PropertyChangedEventArgs(name)
);
public ICommand OnHelloClicked { get; private set; }
public MyViewModel()
{
OnHelloClicked = new Command(() => {
this.Hello = "ようこそ";
});
}
}
ボイラープレートコードが多いため,PrismやReactivePropertyなどのライブラリを用いる選択肢がある.
そもそも値の変更の通知はデータバインディングで実現するのが一般に自然.
View
ViewModelとデータバインディングで繋がり,ViewModelを表示する.
リフレクションによってViewModelのプロパティを参照している.
ViewModelにコマンドや通知を送信する.
code:View.xml
<Label Text="{Binding Hello}"/>
<Button Text="Click" Command="{Binding OnHelloClicked}"/>