我有一个UI小部件的界面,其中两个是演示者的属性。
public IMatrixWidget NonProjectActivityMatrix {
set {
// validate the incoming value and set the field
_nonProjectActivityMatrix = value;
....
// configure & load non-project activities
}
public IMatrixWidget ProjectActivityMatrix {
set {
// validate the incoming value and set the field
_projectActivityMatrix = value;
....
// configure & load project activities
}
窗口小部件有一个两个演示者对象都订阅的事件,因此演示者中有一个事件处理程序,如下所示:
public void OnActivityEntry(object sender, EntryChangedEventArgs e) {
// calculate newTotal here
....
if (ReferenceEquals(sender, _nonProjectActivityMatrix)) {
_nonProjectActivityMatrix.UpdateTotalHours(feedback.ActivityTotal);
}
else if (ReferenceEquals(sender, _projectActivityMatrix)) {
_projectActivityMatrix.UpdateTotalHours(feedback.ActivityTotal);
}
else {
// ERROR - we should never be here
}
}
问题是发件人上的ReferenceEquals失败了,即使它是作为发件人的已实现窗口小部件 - 设置为presenter属性的相同实现窗口小部件!
有人能发现问题/解决方案是什么吗?
干杯, Berryl
我不知道你可以很好地编辑。凉。以下是提升代码的事件:
void OnGridViewNumericUpDownEditingControl_ValueChanged(object sender, EventArgs e)
{
// omitted to save sapce
if (EntryChanged == null) return;
var args = new EntryChangedEventArgs(activityID, dayID, Convert.ToDouble(amount));
EntryChanged(this, args);
}
以下是presenter属性的调试器转储,sans namespace info:
?_nonProjectActivityMatrix
{WinPresentation.Widgets.MatrixWidgetDgv}
[WinPresentation.Widgets.MatrixWidgetDgv]: {WinPresentation.Widgets.MatrixWidgetDgv}
以下是发件人的调试器转储:
?sender
{WinPresentation.Widgets.MatrixWidgetDgv}
base {Core.GUI.Widgets.Lookup.MatrixWidgetBase<Core.GUI.Widgets.Lookup.DynamicDisplayDto>}: {WinPresentation.Widgets.MatrixWidgetDgv}
_configuration: {Domain.Presentation.Timesheet.Matrix.WeeklyMatrixConfiguration}
_wrappedWidget: {Win.Widgets.DataGridViewDynamicLookupWidget}
AllowUserToAddRows: true
ColumnCount: 11
Count: 4
EntryChanged: {Method = {Void OnActivityEntry(System.Object, Smack.ConstructionAdmin.Domain.Presentation.Timesheet.Matrix.EntryChangedEventArgs)}}
SelectedCell: {DataGridViewNumericUpDownCell { ColumnIndex=3, RowIndex=3 }}
SelectedCellValue: "0.00"
SelectedColumn: {DataGridViewNumericUpDownColumn { Name=MONDAY, Index=3 }}
SelectedItem: {'AdministrativeActivity: 130-04', , AdministrativeTime, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00}
答案 0 :(得分:0)
在我的脑海中,我可以想到为什么ReferenceEquals会返回false的原因:
sender
为null
- 在举起活动时,请确认小部件发送this
作为发件人参数。null
sender
不是您认为的那样(您如何确认它确实是您期望的发件人)struct
,而不是class
可能会有更多,但这是我要开始的地方(按此顺序)。
更新:引起我注意的一件事是:
_wrappedWidget: {Win.Widgets.DataGridViewDynamicLookupWidget}
是不是发件人是包装你的小部件的对象?如果是这种情况,ReferenceEquals在进行比较时自然会返回false。