WPF TextBox MVVM DataBinding & use of UpdateSourceTrigger
If you are using a TextBox in your WPF application with MVVM pattern & want to keep the TextBox Text and the property in the ViewModel synchronized, you need to use UpdateSourceTrigger=PropertyChanged in the binding. Here is an example:
View XAML:
<Window x:Class="WPF.MainWindow" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Title="WPF TextBox MVVM DataBinding Example" Height="500" Width="500">
    <Grid>
        <TextBox Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Height="25" />
    Grid>
Window>
View Code Behind:
using WPF.ViewModel;
namespace WPF
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new TextBoxViewModel();
        }
    }
}
ViewModel:
using System.ComponentModel;
namespace WPF.ViewModel
{
    public class TextBoxViewModel : INotifyPropertyChanged
    {
        private string _name;
        public string Name
        {
            get { return _name; }
            set
            {
                _name = value;
                OnPropertyChanged("Name");
            }
        }
        #region INotifyPropertyChanged Members
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
        #endregion INotifyPropertyChanged Members
    }
} 
  
Hi,
ReplyDeleteI'm doing the same way for binding,
with a little difference,
I want to check if the enter (\r\n) pressed or not, then do something and clear the textbox.
so I changed the 'set' to:
{
_name = value;
if (_name.IndexOf("\r\n") > -1)
{
dosomething();
_name = "";
}
OnPropertyChanged("Name");
}
this works if I enter some text and then press enter,
but if I press enter, the "\r\n" value remains in the textbox !
any idea?