2011-12-23 1 views
1

Я пытаюсь запрограммировать какой-то секундомер для Windows Phone 7. Чтобы измерить прошедшее время, я использую класс секундомера. Для печати вывода я использую текстовый блок. Но я бы хотел, чтобы текстовый блок показывал прошедшее время все время.Windows Phone 7 постоянно обновляет текстовый блок

Unitl теперь я могу только обновить текстовый блок событий (я использую событие button_Click) Я пробовал while (true), но это только зависает от телефона.

Есть ли у кого-нибудь хорошая идея, как я могу это исправить?

ответ

2

Класс 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(); 
+0

Спасибо за быстрый ответ. Я искал что-то вроде Binding, но не нашел. к сожалению, это не сработает (как мне кажется), я хотел использовать переменную String show = randomTimespanvariable.ToString(); – asky

+0

Причина, по которой связь не работает, очень проста. Секундомер. Исключено не DependancyProperty. Причина этого не в том, что вы не хотите обновлять ее значение каждые 1 миллисекунду. В вашем случае нет элегантного связующего решения. Я пробовал приведенный выше код, и он работал очень хорошо даже с 'Timespan.FromSeconds (0.1)' как Interval. –

+0

Если вы все еще хотите привязку, просто назначьте значение myStopWatch.Elapsed в DependancyPeoprty строки типа, а затем просто привяжите свой TextBlock к этому, но функционально вы ничего не меняете, возможно, нет необходимости вызывать Диспетчер. Дайте мне знать, если вам нужна кодовая помощь. –