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イベントに送信する必要があります。私はどうすればできますか?
なぜタイマーを静的にする必要がありますか? –
@ NicolasRepiquet:RequestTypeChangedは静的なので、静的でなければなりません。 – Ehsan
もちろん、静的であるためにはRequestTypeChangedです。しかし、あなたは 'RadarView'を参照しているので、' radar.Timer'のようなことをすることはできません。あなたのすべての 'RadarView'インスタンスにわたって同じタイマーを共有することは良いとは言えません。 –