【发布时间】:2016-05-03 07:52:42
【问题描述】:
我正在尝试使用数据绑定创建 WPF 应用程序。我已经完成了它,就像显示 here 一样,但是我的标签在更改时没有更新值。我认为原因是 PropertyChanged 等于 null
这是我的 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;
【问题讨论】:
-
你设置了datacontext吗?
-
您是否在代码中设置了数据上下文?数据上下文的类是否实现了 INotifyPropertyChanged?
ViewModel : INotifyPropertyChanged -
避免数据绑定到 Label.Content 属性 msdn.microsoft.com/en-us/library/bb613560%28v=vs.100%29.aspx
标签: c# wpf data-binding