0

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, the property InputText 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
    }
}

2 Answers 2

3

If you explicitly specify TwoWay binding on the first textbox does that fix it?

<TextBox 
    Text="{Binding InputText, Mode=TwoWay}"
    Height="200"
    Width="600"
    Margin="0 0 0 10"/>
Sign up to request clarification or add additional context in comments.

Comments

0

ok, seems as though I just need to define the Mode=TwoWay and it works:

Text="{Binding InputText, Mode=TwoWay}"

Strange that it works in WPF without explicitly specifying Mode=TwoWay.

1 Comment

msdn.microsoft.com/en-us/library/cc278072(VS.95).aspx OneWay is default in Silverlight, it would appear. My hunch is at least for text boxes, TwoWay is default in WPF.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.