如何在Code中设置绑定?

Wil*_*lem 83 c# data-binding wpf xaml

我需要在代码中设置绑定.

我似乎无法做到这一点.

这是我尝试过的:

XAML:

<TextBox Name="txtText"></TextBox>
Run Code Online (Sandbox Code Playgroud)

代码背后:

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

视图模型:

public string SomeString
    {
      get
      { 
          return someString;
      }
      set 
      { 
          someString= value;
          OnPropertyChanged("SomeString");
      }
    }
Run Code Online (Sandbox Code Playgroud)

我设置它时,属性不会更新.

我究竟做错了什么?

Dyp*_*ppl 172

试试这个:

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);
Run Code Online (Sandbox Code Playgroud)

如果你指定path(就像在构造函数中那样),你的源应该只是ViewModel,那么.SomeString从路径开始评估该部分.

  • 您也可以使用txtText.SetBinding(TextBox.TextProperty,myBinding)代替最后一行,以减少输入:) (11认同)
  • @ManishDubey 静态方法的好处是第一个参数被定义为一个 DependencyObject,因此它可以对不是从 FrameworkElement 或 FrameworkContentElement 派生的对象(例如 Freezables)启用数据绑定。 (2认同)

baa*_*mon 10

您需要将源更改为viewmodel对象:

myBinding.Source = viewModelObject;
Run Code Online (Sandbox Code Playgroud)