IneedHelp
IneedHelp

Reputation: 1758

How to update source bind when target's property changes?

I've got two text boxes txt1 and txt2 and a string dependency property sprop.

public static readonly DependencyProperty spropProperty = DependencyProperty.Register("sprop", typeof (string), typeof (MainWindow), new UIPropertyMetadata(string.Empty));

public string sprop
{
    get { return (string) this.GetValue(spropProperty); }
    set { this.SetValue(spropProperty, value); }
}

Now, if I set data binding in XAML for txt1 this way:

Text="{Binding sprop, ElementName=window, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}

txt1 updates sprop instantaneously, whenever the text box text is changed.

But if I set data binding in C# for txt2 this way:

DataContext = this;
txt2.SetBinding(TextBox.TextProperty, "sprop");

then txt2 updates sprop only when it loses focus.

How can I update sprop as soon as txt2's text changes using C# code?


What I have tried:

DataContext = this;
var myBinding = new Binding("sprop");
myBinding.Source = this;
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
txt2.SetBinding(TextBlock.TextProperty, myBinding);

Upvotes: 0

Views: 3471

Answers (2)

Erre Efe
Erre Efe

Reputation: 15557

You need to also set the UpdateSourceTrigger in your txt2 in order to get updated once property changed, which you can also set in code:

Binding myBinding = new Binding("MyDataProperty");
myBinding.Source = myDataObject;
myBinding.Mode = TwoWay;
myBinding.UpdateSourceTrigger = PropertyChanged;
myText.SetBinding(TextBlock.TextProperty, myBinding);

Upvotes: 2

licabl
licabl

Reputation: 66

Did you set the txt2 to Mode=TwoWay?

Upvotes: 1

Related Questions