0

I got an Problem with updating the text in a Textbox. I got this MainWindow:

<Window x:Class="TestDatabinding.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">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <TextBox Grid.Row="0" Text="{Binding Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="10,10,10,10"/>
    <Button Grid.Row="1" Content="Click me" Margin="10,10,10,10" Click="Button_Click"></Button>
    <Button Grid.Row="2" x:Name="a1" Content="ShowText" Margin="10,10,10,10" Click="a1_Click" ></Button>
</Grid>

Now the cs-file for this MainWindow looks like:

using System.Windows;
namespace TestDatabinding
{
    public partial class MainWindow : Window
    {
        MainWindowViewModel mwvm;
        public MainWindow()
        {
            InitializeComponent();
            mwvm = new MainWindowViewModel();
            this.DataContext = mwvm;
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            mwvm.ChangeText();
            this.DataContext = mwvm;
        }
        private void a1_Click(object sender, RoutedEventArgs e)
        {
            mwvm.showText();
        }
    }
}

And last but not least the ViewModel Class:

using System.ComponentModel;
using System.Windows;  
namespace TestDatabinding
{
    class MainWindowViewModel
    {
         public event PropertyChangedEventHandler PropertyChanged;
         private string text;
         public string Text
         {
            get { return this.text; }
            set 
            { 
                this.text = value;
                OnPropertyChanged("Text");
            }
        }
        protected void OnPropertyChanged(string name)
        {
             PropertyChangedEventHandler handler = PropertyChanged;
             if (handler != null)
             {
                  handler(this, new PropertyChangedEventArgs(name));
             }
        }
        public void ChangeText()
        {
            this.Text = "Hey paadddyy";
        }
        public void showText()
        {
            MessageBox.Show(Text);
        }
     }
}

I didn´t implement ICommands, because this is a simple test. Now the Button's work correctly but the Textbox Text didn´t get updated. Any suggestions what i can do? I only want to display "Hey paadddyy" when I click the first Button. After I press the second Button and then the first the MessageBox shows "Hey paadddyy" but the Textbox text didn´t get updated :(

Thank you for every hint ;)

2 Answers 2

3

Your MainWindowViewModel does not implement INotifyPropertyChanged. It needs to look like that:

class MainWindowViewModel: INotifyPropertyChanged

you define the event but does not implement the interface

Sign up to request clarification or add additional context in comments.

Comments

-1

It need to implement INotifyPropertyChanged

I suggested that if you want to do something with Notify Property. Another easy way is to apply Caliburn.Micro Framework to your project.

Follow this link.

Comments

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.