Ich bin halb am verzweifeln.
Hab da ein kleines Projekt welches einfach den Text einer Textbox ei drücken der Buttons aktualisieren soll.
Aber mein propertyChanged ist immer null und ich keine Ahnung was verkehrt ist.
Mein Binding sollte eigentlich funktionieren da bei der Initialiserung der Klasse Message die Eigenschaft von "Nachricht" angezeigt wird.
Danke schon mal für Hilfe.
Hier der xaml code:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication3"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:Message x:Key="mes1"/>
</Window.Resources>
<Grid>
<TextBox Text="{Binding Source={StaticResource mes1}, Path=Nachricht, UpdateSourceTrigger=PropertyChanged}"/>
<Button Content="Button1" Name="button1" Click="button1_Click" Margin="0,98,0,183" HorizontalAlignment="Left" Width="132" />
<Button Content="Button2" Name="button2" Click="button2_Click" Margin="0,169,371,109" />
</Grid>
</Window>
Der Code vom window:
public partial class MainWindow : Window
{
Message m = new Message();
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
m.Nachricht = "Message 1";
}
private void button2_Click(object sender, RoutedEventArgs e)
{
m.Nachricht = "Message 2";
}
}
und meine Klasse Message:
class Message : INotifyPropertyChanged
{
public Message()
{
Nachricht = "Test";
}
private string nachricht;
public string Nachricht
{
get
{
return nachricht;
}
set
{
if (value != nachricht)
{
nachricht = value;
RaisePropertyChanged("Nachricht");
}
}
}
protected virtual void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler propertyChanged = PropertyChanged;
if (propertyChanged != null)
{
propertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
Mein Binding sollte eigentlich funktionieren da bei der Initialiserung der Klasse Message die Eigenschaft von "Nachricht" angezeigt wird.
Der Schein trügt: Du erstellst zwei _Message_s - einmal in XAML und einmal im Code.
Schreibe besser in den Konstruktor des Fensters
this.DataContext = m;
Und lasse bei den Bindings alles außer Path weg.
Dann sollte es klappen.
Danke erstmal für Deine Hilfe.
Aber leider funktioniert es auch so nicht.
propertyChanged immer noch null. 🙁
Hallo raneu,
es funktioniert nicht, warum wurde gesagt:
Der Schein trügt: Du erstellst zwei Messages - einmal in XAML und einmal im Code.
D.h. du hast di Message des DataContext, falls du den nun setzt, und die Message des StaticResources. Für eines von Beidem musst du dich entscheiden.
Gruß,
Michael
Funtzt!
👍
Aber trotzdem noch mal die Anmerkung.
Wie funktioniert es ohne
this.DataContext = m;
d.h. wie kann ich es nur mit xaml code lösen?
So funktioniert es ncht.
In code behind ist der DataContext auskommentiert.
this.DataContext = m;
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication3"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:Message x:Key="mes1"/>
</Window.Resources>
<Grid>
<TextBox DataContext="mes1" Name="lb1" Text="{Binding Path=Nachricht}"/>
<Button Content="Button1" Name="button1" Click="button1_Click" Margin="0,98,0,183" HorizontalAlignment="Left" Width="132" />
<Button Content="Button2" Name="button2" Click="button2_Click" Margin="0,169,371,109" />
</Grid>
</Window>
Danke an Euch beide!
Und noch eine Frage. 🙂
Wie krieg ich denn sowas raus.
Debugger?? nee oder.
Output nix gefunden
Wie funktioniert es ohne
this.DataContext = m;
d.h. wie kann ich es nur mit xaml code lösen?
Den DataContext setzt man in xaml mittels
<Windows.DataContext>
<_local:m/>
</Windows.DataContext>
Viele Grüße
Um Rekursion zu verstehen, muss man erst mal Rekursion verstehen, muss man erst mal Rekursion verstehen, ....