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事件有效。我怎麼辦?
爲什麼你需要定時器是靜態的? –
@NicolasRepiquet:因爲RequestTypeChanged是靜態的,它必須是靜態的 – Ehsan
當然'RequestTypeChanged'是靜態的。但是你有一個對'RadarView'的引用,所以沒有什麼能夠阻止你做像'radar.Timer'這樣的東西。在所有的'RadarView'實例中共享相同的定時器聽起來不太好。 –