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)