ビューにはいくつかのボタンが含まれています。ViewModel には「IsShiftLock」プロパティが存在し、バインディングが動的に作成されます。
public bool IsShiftLock {
get { return _isShiftLock; }
set {
if (value != _isShiftLock) {
_isShiftLock = value;
Notify("IsShiftLock");
}
}
}
Notify は BaseViewModel のメソッドです。
public abstract class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void Notify(string sPropertyName)
{
PropertyChangedEventHandler changedEventHandler = this.PropertyChanged;
if (changedEventHandler == null)
return;
changedEventHandler((object) this, new PropertyChangedEventArgs(sPropertyName));
}
}
Binding b2 = new Binding {
Source = this,
Path = new PropertyPath("IsShiftLock"),
Converter = new ShiftLockToTextConverter()
};
b2.Mode = BindingMode.OneWay;
curKeyView.Button.SetBinding(ContentControl.ContentProperty, b2);
IsShiftLock は適切に変更されますが、コンバーターの呼び出しは 1 回しか発生しません。私が理解しているように、バインディングは変更を適切に通知する必要があります。それを達成する方法は?
更新 1:
ビュー側:
private readonly KeyboardViewModel viewModel;
public static KeyboardViewModel ViewModelInstance;
public VirtualKeyboard() {
Loaded += OnLoaded;
InitializeComponent();
viewModel = new KeyboardViewModel();
DataContext = viewModel;
ViewModelInstance = viewModel;
}