PBS
PBS

Reputation: 53

C# WPF Update Textbox on Property change

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 ;)

Upvotes: 0

Views: 3189

Answers (2)

shiteru
shiteru

Reputation: 643

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.

Upvotes: -1

dkozl
dkozl

Reputation: 33364

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

Upvotes: 3

Related Questions