Класс StopWatch
не содержит никаких событий, поэтому, если вы хотите связать, вам нужно либо написать свой собственный класс, либо опросить StopWatch с помощью таймера. Вы можете использовать Binding для привязки свойств из TextBlock к секундомеру. Сначала добавьте привязку DataContext к вашей странице xaml.
<phone:PhoneApplicationPage
DataContext="{Binding RelativeSource={RelativeSource Self}}" >
Затем связать ваш TextBlock как так
<TextBlock x:Name="myTextBlock" Text="{Binding StopwatchTime}" />
и в код, добавьте DependancyProperty и необходимый код таймера.
public static readonly DependencyProperty StopwatchTimeProperty =
DependencyProperty.Register("StopwatchTime", typeof(string), typeof(MainPage), new PropertyMetadata(string.Empty));
public string StopwatchTime
{
get { return (string)GetValue(StopwatchTimeProperty); }
set { SetValue(StopwatchTimeProperty, value); }
}
и код таймера где ...
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(0.2); // customize update interval
timer.Tick += delegate(object sender, EventArgs e)
{
StopwatchTime = sw.Elapsed.Seconds.ToString(); // customize format
};
timer.Start();
Спасибо за быстрый ответ. Я искал что-то вроде Binding, но не нашел. к сожалению, это не сработает (как мне кажется), я хотел использовать переменную String show = randomTimespanvariable.ToString(); – asky
Причина, по которой связь не работает, очень проста. Секундомер. Исключено не DependancyProperty. Причина этого не в том, что вы не хотите обновлять ее значение каждые 1 миллисекунду. В вашем случае нет элегантного связующего решения. Я пробовал приведенный выше код, и он работал очень хорошо даже с 'Timespan.FromSeconds (0.1)' как Interval. –
Если вы все еще хотите привязку, просто назначьте значение myStopWatch.Elapsed в DependancyPeoprty строки типа, а затем просто привяжите свой TextBlock к этому, но функционально вы ничего не меняете, возможно, нет необходимости вызывать Диспетчер. Дайте мне знать, если вам нужна кодовая помощь. –