在我的MainViewModel
中,我订阅了Event
:
var uc = new MyUserControl();
uc.ViewModel.ValueTypeChangedEvent += OnValueTypeChanged;
Control05 = uc;
StartMeasuring2();
我的
BackgroundWorker
是:private myUserControl Control05 { get; set; }
private void StartMeasuring2()
{
_backgroundWorkerP2.RunWorkerCompleted += backgroundWorkerCompleted;
_backgroundWorkerP2.DoWork += BackgroundWorkerDoWork;
if (_backgroundWorkerP2.IsBusy)
_backgroundWorkerP2.CancelAsync();
else
{
_backgroundWorkerP2.RunWorkerAsync();
}
}
private void BackgroundWorkerDoWork(object sender, DoWorkEventArgs eventArgs)
{
Thread.Sleep(3000);
while (!StopMeasuringP2)
{
const int measurementStatus = 0;
var random = new Random();
double measurementValue = random.Next(1, 9);
var dateTime = DateTime.Now;
Control05.ViewModel.UserControl1.ViewModel.LastDayMesswerte(dateTime,measurementValue, measurementStatus);
Thread.Sleep(7000);
}
}
编辑:
这是我在用户控件
ViewModel
中的LastDayMesswerte方法:public virtual void LastDayMesswerte(DateTime time, double measurementValue, int measurementStatus)
{
if(measurementValue>=0 && measurementValue<3)
ValueType = "Alarm";
if(measurementValue>=3 && measurementValue<6)
ValueType = "Warning";
else
{
ValueType = "Normal";
}
}
我的
ValueType
是属性:public virtual string ValueType
{
get { return _valueType; }
set
{
if (_valueType == value) return;
_valueType = value;
OnValueTypeChangedEvent(ControlId, MasterId);
}
}
OnValueTypeChangedEvent
:protected virtual void OnValueTypeChangedEvent(int controlId, int masterId)
{
ValueTypeChangedEventHandler handler;
lock (_valueTypeChangedEventLock)
{
handler = _valueTypeChangedEvent;
}
if (handler != null) handler(controlId, masterId);
}
因此,在我用自己的
LastDayMesswerte
调用BackgroundWorker
之前,_valueTypeChangedEvent
不为NULL。我在方法LastDayMesswerte
的第一个if语句上设置了一个断点,并且_valueTypeChangedEvent
已经为NULL。为什么会这样呢?
最佳答案
如果我没记错的话(您的代码很不常见-我不会从ViewModel创建一个UserControl,该ViewModel在其ViewModel中还包含另一个UserControl本身也具有ViewModel),那么问题就在于
Control05.ViewModel.UserControl1.ViewModel.LastDayMesswerte(...)
您在
LastDayMesswerte
中调用Control05.ViewModel.UserControl1.ViewModel
,但从未在其中设置ValueTypeChangedEvent
。相反,您将其设置为Control05.ViewModel
。
关于c# - 当我引发事件时,它始终为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17065379/