2016-05-03 3 views
1

Ich versuche, eine WPF-Anwendung mit Datenbindungen zu erstellen. Ich habe es so gemacht, als ob es angezeigt wird here aber meine Etiketten aktualisieren den Wert nicht, wenn es geändert wird. Ich glaube, der Grund dafür ist, dass Property gleich nullC# Warum aktualisiert meine Datenbindung ein PropertyChanged-Ereignis nicht?

Hier ist meine XAML:

<Window x:Name="MainWindow1" x:Class="Gui.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:Gui" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="315.448" Width="1131.79" ResizeMode="NoResize" Background="#FFFDF9F9"> 

    <Grid Margin="0,0,2,0"> 
     <Label x:Name="stopWatchMethod1" Content="{Binding Path=TimeMethod1, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Margin="343,69,0,0" VerticalAlignment="Top" Height="28" Width="440"/> 
    </Grid> 

</Window> 

und mein Code sieht hinter wie folgt aus:

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private string timeMethod1 = "---"; 

    public string TimeMethod1 
    { 
     get { return timeMethod1; } 
     set 
     { 
      timeMethod1 = value; 

      NotifyPropertyChanged(); 
     } 
    } 


    protected virtual void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     var handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

Ich bin Stellen Sie den Wert hier richtig ein:

ts = stopWatch.Elapsed; 
elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds/10); 
TimeMethod1 = elapsedTime; 
+1

haben Sie den Datacontext gesetzt? –

+1

Haben Sie den Datenkontext im Code festgelegt? Implementiert die Klasse für den Datenkontext INotifyPropertyChanged? 'ViewModel: INotifyPropertyChanged' –

+0

Vermeiden Sie die Datenbindung an die Label.Content-Eigenschaft https://msdn.microsoft.com/en-us/library/bb613560%28v=vs.100%29.aspx – adminSoftDK

Antwort

1

Sie haben die DataContext nicht festgelegt.

In Ihrem Konstruktor schreiben:

public MainWindow() 
{ 
    InitializeComponent(); 
    DataContext = this; 
} 

diese Steuerelemente ermöglicht für Immobilien zu hören geändert durch Ihre ausgelösten Ereignisse MainWindow (die DataContext)

+0

Danke, es funktioniert jetzt. Nur meine Stoppuhr wird beim Laufen nicht aktualisiert, aber ich denke, das ist ein anderes Problem. – CoookieMonster

+0

Ja, ich stimme zu. Ich würde vorschlagen, dass Sie eine weitere Frage für dieses Problem öffnen –

0

Bei Ihrem Code ist ein Fehler aufgetreten. Ich habe es korrigiert. Der Eigenschaftenname wurde nicht definiert. Bitte überprüfen Sie mit dem folgenden Code. Es sollte funktionieren.

public string TimeMethod1 
{ 
     get { return timeMethod1; } 
     set 
     { 
      timeMethod1 = value; 

      NotifyPropertyChanged("TimeMethod1"); 
     } 
} 
+0

Es funktioniert immer noch nicht. In der Methode _NotifyPropertyChanged_ var ist der Handler null ==> er tut nichts – CoookieMonster

+0

Dann setzen Sie den Datenkontext möglicherweise nicht richtig. Setzen Sie im Konstruktor Ihrer Sicht den Datenkontext auf Ihre Viewmodel-Klasseninstanz. – ViVi

+0

Nun, mein Konstruktor ist in dem obigen Code. Alle anderen Konstruktoren in meinem Code machen nichts mit meiner UI – CoookieMonster