J'ai une interface pour un widget d'interface utilisateur, dont deux sont des attributs d'un présentateur.égalité sur l'expéditeur d'un événement
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
}
Le widget a un événement que les deux objets du présentateur souscrivent, et donc il est un gestionnaire d'événements dans le présentateur comme ceci:
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
}
}
Le problème est que les ReferenceEquals sur l'expéditeur échoue, même si c'est le widget implémenté qui est l'expéditeur - le même widget implémenté qui a été mis à l'attribut du présentateur! Est-ce que quelqu'un peut voir ce que le problème/correctif est?
Cheers, Berryl
Je ne savais pas qu'on pouvait modifier bien. Cool. Voici l'événement de code à lever:
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);
}
est ici le vidage de débogage de l'attribut présentateur, espace de noms sans info:
?_nonProjectActivityMatrix
{WinPresentation.Widgets.MatrixWidgetDgv}
[WinPresentation.Widgets.MatrixWidgetDgv]: {WinPresentation.Widgets.MatrixWidgetDgv}
Voici la décharge de débogage de l'expéditeur:
?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}
- Berryl
Veuillez ajouter le bout de code où l'événement est levé. En ce moment nous pouvons seulement deviner. –
Que se passe-t-il dans EntryChanged; avez-vous le code pour cela? –
Beryl, vous pouvez Modifier votre question d'origine. –