無法弄清楚爲什麼這個計時器不顯示信息。計時器被裝配來更新TimeEntry中的TextBlock。綁定似乎不起作用,我不知道如何正確地做到這一點。我查看了MSDN網站。他們只是提供基礎知識:還不夠。數據綁定與計時器實現
代碼:
TimeEntry.xaml.cs:
public partial class TimeEntry : UserControl
{
public static readonly DependencyProperty timeSpentProperty =
DependencyProperty.Register("timeSpent", typeof(TimeSpan),
typeof(TimeEntry),
new FrameworkPropertyMetadata(TimeSpan.Zero));
#region Properties
public TimeSpan timeSpent
{
get
{
return (TimeSpan)GetValue(TimeEntry.timeSpentProperty);
}
set
{
SetValue(TimeEntry.timeSpentProperty, value);
}
}
#endregion
static TimeEntry() { }
public TimeEntry(int id)
{
DataContext = this;
this.InitializeComponent();
//code
}
}
TimeEntry.xaml:
<UserControl
x:Class="ClockWatcher.TimeEntry"
x:Name="UserControl">
<Grid x:Name="LayoutRoot" HorizontalAlignment="Left"
VerticalAlignment="Top" Width="{DynamicResource creationWidth}"
Height="{DynamicResource creationHeight}">
<TextBlock x:Name="timeSpentBlock"
HorizontalAlignment="Left" TextWrapping="Wrap"
Text="{Binding timeSpent, ElementName=UserControl}"
VerticalAlignment="Top" Padding="{StaticResource labelPadding}"/>
</Grid>
</UserControl>
SessionManager.cs:
public class SessionManager : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
[NonSerialized]
private Timer _timer;
[NonSerialized]
private Stopwatch _clockWatch;
[NonSerialized]
private DateTime _dtStartTime;
private Session current_session;
public string strStartTime
{
get
{
return _dtStartTime.ToString();
}
private set { }
}
public SessionManager()
{
_clockWatch = new Stopwatch();
_timer = new Timer(1000);//one second
_timer.Elapsed += clockWatch_Elapsed;
_dtStartTime = DateTime.Now;
CurrentSession = new Session();
}
/// <summary>
/// Registered to Timer.Elapsed Event
/// (See constructor)
/// </summary>
public void clockWatch_Elapsed(object sender, ElapsedEventArgs e)
{
if (CurrentSession != null)
{
//update the timespent variable of the current timeEntry
if (CurrentSession.currentTimeEntry != null)
{
CurrentSession.currentTimeEntry.timeSpent = _clockWatch.Elapsed;
calculateTotalTime();
}
}
}
private void OnPropertyChanged([CallerMemberName] string member_name = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(member_name));
}
}
}
您的任務中的哪部分時間值是?也許那是缺少的一個。 – tgpdyk
@tgpdyk:它在關聯的DependencyProperty中。 –
我的意思是:'
tgpdyk