using System; >using System.ComponentModel; >using System.Diagnostics; >using System.Windows; >using System.Windows.Data; > >namespace BindingTest >{ > public partial class MainWindow : Window, INotifyPropertyChanged > { > public MainWindow() > { > InitializeComponent(); > DataContext = this; > } > > string theText; > public string TheText > { > get { return theText; } > set > { > if (theText != value) > { > theText = value; > OnPropertyChanged("TheText"); > } > } > } > > public event PropertyChangedEventHandler PropertyChanged; > > void OnPropertyChanged(string s) > { > if (PropertyChanged != null) > PropertyChanged(this, new PropertyChangedEventArgs(s)); > } > > private string s = "String A"; > private void SetTarget(object sender, RoutedEventArgs e) > { > TB.Text = s; > s = s == "String A" ? "String B" : "String A"; > } > } > > public class TBConverter : IValueConverter > { > public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) > { > if (value == null) return Binding.DoNothing; > return ((string)value).ToUpper(); > } > > public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) > { > return ((String)value).ToLower(); > } > } >}XAML:
<Window x:Class="BindingTest.MainWindow" > xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" > xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > Title="MainWindow" Height="350" Width="525" > xmlns:local="clr-namespace:BindingTest"> > <Window.Resources> > <local:TBConverter x:Key="TBC" /> > </Window.Resources> > <StackPanel> > <TextBox x:Name="TB" Height="31" HorizontalAlignment="Left" Margin="71,45,0,0" VerticalAlignment="Top" Width="148" > Text="{Binding Path=TheText,Mode=TwoWay, Converter={StaticResource TBC}}"/> > <TextBox x:Name="TB2" Height="31" HorizontalAlignment="Left" Margin="71,45,0,0" VerticalAlignment="Top" Width="148" > Text="{Binding Path=TheText,Mode=TwoWay, Converter={StaticResource TBC}}"/> > <Button Click="SetTarget">Set Target</Button> > </StackPanel> ></Window>The binding and converter still appear to be operating after 'TB.Text = s;' (you need to set focus to the TextBox and tab out to get the source updated or, better, just set the UpdateSourceTrigger to PropertyChanged)