web-dev-qa-db-ja.com

コードでバインディングを設定する方法は?

コードでバインディングを設定する必要があります。

私はそれを正しくすることができないようです。

これは私が試したものです:

XAML:

<TextBox Name="txtText"></TextBox>

コードビハインド:

Binding myBinding = new Binding("SomeString");
myBinding.Source = ViewModel.SomeString;
myBinding.Mode = BindingMode.TwoWay;
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(txtText, TextBox.TextProperty, myBinding);

ViewModel:

public string SomeString
    {
      get
      { 
          return someString;
      }
      set 
      { 
          someString= value;
          OnPropertyChanged("SomeString");
      }
    }

プロパティを設定しても更新されません。

何が間違っていますか?

79
Willem

これを試して:

Binding myBinding = new Binding();
myBinding.Source = ViewModel;
myBinding.Path = new PropertyPath("SomeString");
myBinding.Mode = BindingMode.TwoWay;
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(txtText, TextBox.TextProperty, myBinding);

(コンストラクタで行うように)pathを指定する場合、ソースはViewModelである必要があり、.SomeString部分はパスから評価されます。

168
Dyppl

ソースをviewmodelオブジェクトに変更する必要があります。

myBinding.Source = viewModelObject;
10
baalazamon