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)