Two way binding for TextBox
Solution 1
Change
textBox1.SetBinding(TextBlock.TextProperty, bind);
to
textBox1.SetBinding(TextBox.TextProperty, bind);
Solution 2
you don't have to do it this way, even if you want to use your playlist later on. Just use a Property in your Window like:
public PlayList PlayList
{
get;
private set;
}
and Bind your TextBox like this:
<TextBox Text="{Binding Path=PlayList.DriveLetter}"/>
you also have to set the DataContext of the Window, I think:
DataContext = this;
or you set the Data Context to your PlayList:
DataContext = PlayList;
so the Binding looks like this:
<TextBox Text="{Binding Path=DriveLetter}"/>
Solution 3
change
textBox1.SetBinding(TextBlock.TextProperty, bind);
to
textBox1.SetBinding(TextBox.TextProperty, bind);
You are binding TextBlock's
text property rather than TexBox's
text property
mszubart
Updated on June 04, 2022Comments
-
mszubart almost 2 years
This question was asked here for thousands times. But really, none of your examples and answers works for me. So let me show you my code.
public class PlayList : INotifyPropertyChanged{ public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged(string name) { var handler = PropertyChanged; if (handler != null) { PropertyChanged(this, new PropertyChangedEventArgs(name)); } } private string _dl; public string DriveLetter { get { return _dl; } set { if (value != _dl) { _dl = value; OnPropertyChanged("DriveLetter"); } } } } public partial class MainWindow : Window { public PlayList playlist = new PlayList(); private void Window_Loaded(object sender, RoutedEventArgs e) { Binding bind = new Binding("DriveLetter"); bind.Source = this.playlist; bind.Mode = BindingMode.TwoWay; bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; textBox1.SetBinding(TextBlock.TextProperty, bind); this.playlist.DriveLetter = "A"; } }
Ofcourse WPF ignores this binding (nothing changes when I type in textbox, and nothing changes when I change playlist.DriveLetter property.
Debugger says, that PropertyChanged handler is not null
{Method = {Void OnPropertyChanged(System.Object, System.ComponentModel.PropertyChangedEventArgs)}}
So, any ideas what I am doing wrong. (I do not belive that WPF is wrong)?
Thanks in advance!
-
mszubart over 12 yearsI am really sorry. Really sorry for my blindness (too fast typing + InteliSense). I'm going to Castorama to buy some rope. 2 Days wasted.