Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
PropertyChangedEventHandler propertyChanged ist immer null
raneu
myCSharp.de - Member



Dabei seit:
Beiträge: 65

Themenstarter:

PropertyChangedEventHandler propertyChanged ist immer null

beantworten | zitieren | melden

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;     
       }
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 5.742
Herkunft: Stuttgart

beantworten | zitieren | melden

Zitat von raneu
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 Messages - 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.
private Nachricht | Beiträge des Benutzers
raneu
myCSharp.de - Member



Dabei seit:
Beiträge: 65

Themenstarter:

PropertyChangedEventHandler propertyChanged ist immer null

beantworten | zitieren | melden

Danke erstmal für Deine Hilfe.

Aber leider funktioniert es auch so nicht.

propertyChanged immer noch null.
private Nachricht | Beiträge des Benutzers
xxMUROxx
myCSharp.de - Member

Avatar #avatar-3236.jpg


Dabei seit:
Beiträge: 1.552
Herkunft: Südtirol/Italien

beantworten | zitieren | melden

Hallo raneu,

es funktioniert nicht, warum wurde gesagt:
Zitat
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
Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp
private Nachricht | Beiträge des Benutzers
raneu
myCSharp.de - Member



Dabei seit:
Beiträge: 65

Themenstarter:

beantworten | zitieren | melden

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!
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von raneu am .
private Nachricht | Beiträge des Benutzers
raneu
myCSharp.de - Member



Dabei seit:
Beiträge: 65

Themenstarter:

beantworten | zitieren | melden

Und noch eine Frage.

Wie krieg ich denn sowas raus.
Debugger?? nee oder.

Output nix gefunden
private Nachricht | Beiträge des Benutzers
wackelkontakt
myCSharp.de - Member

Avatar #avatar-3290.jpg


Dabei seit:
Beiträge: 109
Herkunft: Dresden

beantworten | zitieren | melden

Zitat von raneu

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, ....
private Nachricht | Beiträge des Benutzers