2016-04-04 12 views
0

Ich habe ein Textfeld, das von einer Eigenschaft ausgefüllt wird. Wenn ich auf die Schaltfläche klicke, wird der Eigenschaftswert geändert und der Inhalt der Textbox sollte ebenfalls geändert werden. Allerdings hat mein Eigentum geändert Ereignis funktioniert nicht. Ich habe hier und in anderen Quellen bereits nach einer Lösung gesucht. Ich habe nichts gefunden, was helfen könnte. Kann mir jemand helfen?PropertyChanged funktioniert nicht zum Binden

Code:

using System.ComponentModel; 

namespace TestWPF { 
    public class Class1 : INotifyPropertyChanged { 

     public event PropertyChangedEventHandler PropertyChanged; 
     protected void OnPropertyChanged(string name) { 
      if (PropertyChanged != null) { 
       PropertyChanged(this, new PropertyChangedEventArgs(name)); 
      } 
     } 

     private string test = "test"; 
     public string TestProperty { 
      get { return test; } 
      set { 
       if (value != test) 
        test = value; 
       OnPropertyChanged("TestProperty"); 
      } 
     } 
    } 
} 

<Window.DataContext> 
<local:Class1/> 
</Window.DataContext> 
<Grid> 
    <TextBox Text="{Binding Path=TestProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="textBox" HorizontalAlignment="Center" Margin="0,-100,0,0" Height="69" TextWrapping="Wrap" VerticalAlignment="Center" Width="255"/> 
    <Button x:Name="button" Content="Button" HorizontalAlignment="Center" Margin="0,0,0,0" VerticalAlignment="Center" Width="75" Click="button_Click"/> 
</Grid> 

Edit:

 private void button_Click(object sender, RoutedEventArgs e) { 
     cs1.TestProperty = "Test button"; 
    } 
+0

'cs1' (ich vermute es ist eine Instanz von' Class1')! = 'Window.DataContext'; Fenster ist an einen anderen Kontext gebunden – ASh

+0

danke für Ihre Hilfe –

Antwort

0
private void button_Click(object sender, RoutedEventArgs e) 
{ 
     var dc = (sender as System.Windows.Controls.Button).DataContext; 
     var cs1 = dc as Class1; 
     cs1.TestProperty = "Test button"; 
} 

oder

public partial class MainWindow : Window 
{ 

    Class1 cs1; 

    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = cs1 = new Class1(); 
    } 

    private void button_Click(object sender, RoutedEventArgs e) 
    { 
     cs1.TestProperty = "Test button"; 
    } 
} 

Und ohne:

<Window.DataContext> 
    <local:Class1/> 
</Window.DataContext>