<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....