<Window x:Class="WpfApplication4.MainWindow" > xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" > xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > xmlns:local="clr-namespace:WpfApplication4" > Title="MainWindow" Height="350" Width="525" > > > <Window.Resources> > <local:ViewModel x:Key="VM"/> > </Window.Resources> > <StackPanel DataContext="{StaticResource VM}"> > <TextBox x:Name="txtBox" Text="{Binding Path=TheText, UpdateSourceTrigger=PropertyChanged}"></TextBox> > <Label Content="{Binding Path=LabelText}"></Label> > </StackPanel> ></Window>where ViewModel (I bodged the MaxLength) is:
public class ViewModel : DependencyObject, INotifyPropertyChanged > { > int MaxLength = 183; > > public string LabelText > { > get > { > if ( TheText==null || TheText.Length == 0) > return string.Format("Max Characters: {0}", MaxLength); > else > return string.Format("Remaining Characters: {0}", MaxLength - TheText.Length); > } > } > > > private string theText; > public string TheText > { > get { return theText; } > set > { > theText = value; > OnPropertyChanged("TheText"); > OnPropertyChanged("LabelText"); > } > } > > public event PropertyChangedEventHandler PropertyChanged; > > void OnPropertyChanged(string s) > { > if (PropertyChanged != null) > PropertyChanged(this, new PropertyChangedEventArgs(s)); > } > }You could, of course bind the label directly to the TextBox.Text.Length in XAML and use a ValueConverter but I assumed you wanted a clean MVVM approach....