<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:MyNameSpace.FormattedDigitalClock"
Title="Formatted Digital Clock">
<Window.Resources>
<src:ClockTicker x:Key="clock" />
<src:FormattedTextConverter x:Key="conv" />
</Window.Resources>
<Window.Content>
<Binding Source="{StaticResource clock}" Path="DateTime"
Converter="{StaticResource conv}"
ConverterParameter="... {0:T} ..." />
</Window.Content>
</Window>
//File:Window.xaml.cs
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Threading;
using System.Globalization;
using System.Windows.Data;
namespace MyNameSpace.FormattedDigitalClock
{
public class ClockTicker : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public DateTime DateTime
{
get { return DateTime.Now; }
}
public ClockTicker()
{
DispatcherTimer timer = new DispatcherTimer();
timer.Tick += TimerOnTick;
timer.Interval = TimeSpan.FromSeconds(1);
timer.Start();
}
void TimerOnTick(object sender, EventArgs args)
{
if (PropertyChanged != null)
PropertyChanged(this,new PropertyChangedEventArgs("DateTime"));
}
}
public class FormattedTextConverter : IValueConverter{
public object Convert(object value, Type typeTarget,object param, CultureInfo culture)
{
if (param is string)
return String.Format(param as string, value);
return value.ToString();
}
public object ConvertBack(object value, Type typeTarget,object param, CultureInfo culture)
{
return null;
}
}
}