當我嘗試將事件從 SimpleFreeDrawModifier 類發布到 FieldSettingViewModel 類時,訂閱者類無法訂閱事件,反之亦然。
發布事件代碼:
public SimpleFreeDrawModifier(RegionManager regionManager, EventAggregator eventAggragator) // Constructor
{
_regionManager = regionManager;
_eventAggragator = eventAggragator;
CorodinatesMapDictionary =new Dictionary<object, object>();
}
private void AppendPoint(Point mousePoint)
{
// On Mouse-down, append another point
if (_dataSeries != null)
{
CorodinatesMapDictionary.Clear();
_dataSeries.Append((double)XAxis.GetDataValue(mousePoint.X), (double)YAxis.GetDataValue(mousePoint.Y));
GlobalVar.XCoordinate=(double)_dataSeries.XValues[0];
GlobalVar.YCoordinate=(double)_dataSeries.YValues[0];
CorodinatesMapDictionary.Add("X", GlobalVar.XCoordinate);
CorodinatesMapDictionary.Add("Y", GlobalVar.YCoordinate);
var calc = Math.Abs(GlobalVar.XCoordinate) * 1.0913;
if (GlobalVar.YCoordinate < 0)
{
if (GlobalVar.YCoordinate >= -(calc))
{
_eventAggragator.GetEvent<MapCoOrdinateChangedEvents>().Publish();
}
}
else
{
if(Math.Abs(GlobalVar.XCoordinate) <=25 && GlobalVar.YCoordinate <=25)
{
_eventAggragator.GetEvent<MapCoOrdinateChangedEvents>().Publish();
}
}
}
}
訂閱事件代碼
public FieldSettingViewModel(RegionManager regionManager,IEventAggregator eventAggragator)
{
_regionManager = regionManager;
_eventAggragator = eventAggragator;
ClearCommand = new DelegateCommand(Clear);
ApplyFieldSettingCommand = new DelegateCommand(ApplyFieldSetting, canApplyFieldSetting);
ScanAreaDataSeries = new XyDataSeries<double, double>();
GetScanSeriesData();
_eventAggragator.GetEvent<MapCoOrdinateChangedEvents>().Subscribe(MapValue);
}
private void MapValue()
{
//throw new NotImplementedException();
}
你能提供任何建議嗎?
uj5u.com熱心網友回復:
如果我錯了,請糾正我,但它看起來像實體化SimpleFreeDrawModifier并且FieldSettingViewModel是通過依賴注入實作的。
您確定FieldSettingViewModel已經創建了一個實體并且它正在接收相同的實體IEventAggregator嗎?
這個沒有 DI 的最小示例有效
using System.Drawing;
using Prism.Events;
var eventAggregator = new EventAggregator();
var pub = new Publisher(eventAggregator);
var sub = new Subscriber(eventAggregator);
pub.AppendPoint(new Point());
public class Publisher
{
private IEventAggregator _eventAggregator;
public Publisher(IEventAggregator eventAggregator) // Constructor
{
_eventAggregator = eventAggregator;
}
public void AppendPoint(Point mousePoint)
{
_eventAggregator.GetEvent<MapCoOrdinateChangedEvents>().Publish();
}
}
public class Subscriber
{
private IEventAggregator _eventAggregator;
public Subscriber(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
_eventAggregator.GetEvent<MapCoOrdinateChangedEvents>().Subscribe(MapValue);
}
private void MapValue()
{
Console.WriteLine("Map value called");
}
}
internal class MapCoOrdinateChangedEvents : PubSubEvent
{
}
檢查 EventAggregator 的 DI 生命周期 isSingleton和 not Transient,還嘗試在建構式中放置斷點FieldSettingViewModel以確保它運行。
如果它沒有運行并且您正在為 DI 注冊它services.AddSingleton<FieldSettingViewModel>(),請嘗試使用services.AddSingleton<FieldSettingViewModel>(new FieldSettingViewModel())以確保有一個實體化。
uj5u.com熱心網友回復:
SimpleFreeDrawModifier的建構式使用EventAggregator而不是介面IEventAggregator因此正如 hwoodiwiss 所精確的那樣,即使它已注冊為單例,它們也不會使用相同的實體。
它已經發生在我身上,我花了很長時間才看到失蹤的我
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/434677.html
