2012-04-30 22 views
0

我有一個MVVM模式的項目。我也有一個用戶控制。這個用戶控件有一個靜態的DependencyProperty如何在「PropertyChanged」事件中發送靜態對象

public partial class RadarView : INotifyPropertyChanged 
{ 


public static DispatcherTimer Timer { get; set; } 

     public static readonly DependencyProperty RequestTypeProperty = DependencyProperty.Register("RequestType", typeof(RadarRequestType), typeof(RadarView), new FrameworkPropertyMetadata(new RadarRequestType(), RequestTypeChanged)); 

     public RadarRequestType RequestType 
     { 
      get 
      { 
       return 
        (RadarRequestType)GetValue(RequestTypeProperty); 
      } 
      set { SetValue(RequestTypeProperty, value); } 
     } 

     public static void RequestTypeChanged(DependencyObject dobject, DependencyPropertyChangedEventArgs args) 
     { 
     var radar = (RadarView)dobject; 

      if (Timer == null) 
       Timer = new DispatcherTimer { Interval = new TimeSpan(0, 0, 1) }; 

      Timer.Tick += DispatcherTimerTick; 

      Timer.Start(); 

     } 

     private static void DispatcherTimerTick(object sender, EventArgs e) 
     { 
      StartText = DateTime.Now.Second.ToString(); 

      PropertyChanged(this, new PropertyChangedEventArgs("StartText")); 
     } 

     public static event PropertyChangedEventHandler PropertyChanged = delegate { }; 

} 

我的問題是在DispatcherTimerTick,因爲這是事件是相同的我的用戶控件,它不是一成不變的。此版本錯誤的消息是:關鍵字「這個」是不是一個靜態屬性,靜態方法或靜態字段初始

其實我需要發送(RadarView)dobject到DispatcherTimerTick事件有效。我怎麼辦?

+0

爲什麼你需要定時器是靜態的? –

+0

@NicolasRepiquet:因爲RequestTypeChanged是靜態的,它必須是靜態的 – Ehsan

+1

當然'RequestTypeChanged'是靜態的。但是你有一個對'RadarView'的引用,所以沒有什麼能夠阻止你做像'radar.Timer'這樣的東西。在所有的'RadarView'實例中共享相同的定時器聽起來不太好。 –

回答

0

我的問題解決了。我使用Timer是錯誤的。我需要radar.Timer