Why does this textbox binding example work in WPF but not in Silverlight?
- by Edward Tanguay
Why is it in the following silverlight application that when I:
change the default text in the first textbox
move the cursor to the second text box (i.e. take focus off first textbox)
click the button
that inside the button handler, it still has the old value "default text"?
What do I have to do to get the binding to work in Silverlight? The same code works fine in WPF.
XAML:
<UserControl x:Class="TestUpdate123.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
  <StackPanel Margin="10" HorizontalAlignment="Left">
          <TextBox 
        Text="{Binding InputText}"
        Height="200"
        Width="600"
        Margin="0 0 0 10"/>
        <StackPanel HorizontalAlignment="Left">
            <Button Content="Convert" Click="Button_Convert_Click" Margin="0 0 0 10"/>
        </StackPanel>
        <TextBox 
        Height="200"
        Width="600"
        Margin="0 0 0 10"/>
        <TextBlock 
            Text="{Binding OutputText}"/>
        </StackPanel>
</UserControl>
Code Behind:
using System.Windows;
using System.Windows.Controls;
using System.ComponentModel;
namespace TestUpdate123
{
    public partial class MainPage : UserControl, INotifyPropertyChanged
    {
        #region ViewModelProperty: InputText
        private string _inputText;
        public string InputText
        {
            get
            {
                return _inputText;
            }
            set
            {
                _inputText = value;
                OnPropertyChanged("InputText");
            }
        }
        #endregion
        #region ViewModelProperty: OutputText
        private string _outputText;
        public string OutputText
        {
            get
            {
                return _outputText;
            }
            set
            {
                _outputText = value;
                OnPropertyChanged("OutputText");
            }
        }
        #endregion
        public MainPage()
        {
            InitializeComponent();
            DataContext = this;
            InputText = "default text";
        }
        private void Button_Convert_Click(object sender, RoutedEventArgs e)
        {
            OutputText = InputText;
        }
        #region INotifiedProperty Block
        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion
    }
}