2016-05-03 37 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

相关问题