2011-12-23 75 views
1

我正在嘗試爲Windows Phone 7編程某種秒錶。爲了衡量經過的時間,我使用了Stopwatch類。要打印輸出,我使用文本塊。但我希望textblock始終顯示已用時間。Windows Phone 7永久更新文本塊

Unitl現在我只能更新事件上的文本塊(我使用button_Click事件) 我嘗試了一段時間(真)循環,但這隻凍結了手機。

有沒有人有關我如何解決這個問題的好主意?

回答

2

StopWatch類沒有任何事件,因此如果要綁定,則必須編寫自己的類或使用計時器輪詢StopWatch。 您可以使用綁定將TextBlock的屬性綁定到秒錶。首先將此DataContext綁定添加到您的頁面xaml。

<phone:PhoneApplicationPage 
     DataContext="{Binding RelativeSource={RelativeSource Self}}" > 

然後結合你的文字塊像這樣

<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

感謝您快速的解答。我正在尋找像綁定但沒有找到的東西。不幸的是它不起作用(我認爲它應該)我想使用一個變量String show = randomTimespanvariable.ToString(); – asky 2011-12-23 17:12:25

+0

綁定不起作用的原因非常簡單。 Stopwatch.Elapsed不是DependancyProperty。原因不是因爲你不想每1毫秒更新它的值。你的情況沒有優雅的綁定解決方案。我嘗試了上面的代碼,即使使用'Timespan.FromSeconds(0.1)'作爲Interval,它的工作也非常好。 – 2011-12-23 17:14:17

+0

如果你仍然想要綁定,只需將myStopWatch.Elapsed值分配給字符串類型的DependancyPeoprty,然後只是將TextBlock綁定到該綁定,但在功能上您沒有更改任何內容,也許不需要調用Dispatcher。讓我知道你是否需要代碼幫助。 – 2011-12-23 17:20:27