2012-04-30 6 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です。このビルドエラーのメッセージは次のとおりです:静的プロパティ、静的メソッド、または静的フィールド初期化子でキーワード 'this'は無効です

実際には(RadarView)dobjectをDispatcherTimerTickイベントに送信する必要があります。私はどうすればできますか?

+0

なぜタイマーを静的にする必要がありますか? –

+0

@ NicolasRepiquet:RequestTypeChangedは静的なので、静的でなければなりません。 – Ehsan

+1

もちろん、静的であるためにはRequestTypeChangedです。しかし、あなたは 'RadarView'を参照しているので、' radar.Timer'のようなことをすることはできません。あなたのすべての 'RadarView'インスタンスにわたって同じタイマーを共有することは良いとは言えません。 –

答えて

0

私の問題は解決しました。 Timerの私の使用は間違っていました。私はradar.Timerが必要でした。

関連する問題