1

ビューにはいくつかのボタンが含まれています。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;
    }
4

2 に答える 2