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)