2016-05-03 41 views
1

我正嘗試使用數據綁定來創建WPF應用程序。我已經完成了它的顯示here,但是我的標籤在更改時沒有更新該值。我認爲其中的原因是,的PropertyChanged等於c#爲什麼我的Databinding沒有更新PropertyChanged事件?

這是我的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> 

和我後面的代碼看起來是這樣的:

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

我將值設置在這裏:

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

你設置的DataContext? –

+1

你是否在代碼中設置了datacontext? datacontext的類是否實現INotifyPropertyChanged? 'ViewModel:INotifyPropertyChanged' –

+0

避免數據綁定到Label.Content屬性https://msdn.microsoft.com/en-us/library/bb613560%28v=vs.100%29.aspx – adminSoftDK

回答

1

您沒有設置DataContext

在構造函數中寫:

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

這使你的控件偵聽屬性更改事件由觸發您MainWindow(在DataContext

+0

謝謝,它的工作現在。只有我的秒錶沒有在運行時更新,但我認爲這是另一個問題 – CoookieMonster

+0

是的,我同意。我建議你爲這個問題提出另一個問題 –

0

您的代碼出現了一些錯誤。我已糾正它。屬性名稱未定義。請檢查下面的代碼。它應該工作。

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

      NotifyPropertyChanged("TimeMethod1"); 
     } 
} 
+0

它仍然無法正常工作。在方法_NotifyPropertyChanged_ var處理程序爲空==>它沒有做任何事情 – CoookieMonster

+0

然後你可能不會正確設置datacontext。在視圖的構造函數中,將datacontext設置爲viewmodel類實例。 – ViVi

+0

好吧,我的構造函數在上面的代碼中。我的代碼中的所有其他構造函數都沒有對我的UI做些什麼 – CoookieMonster

相關問題