Если я правильно понимаю ваш вопрос, вы не хотите «поднимать» локальную переменную в лямбду, например ...
void inboxContextMenu_ItemClick(object sender, Telerik.Windows.RadRoutedEventArgs e) {
var item = (RadMenuItem)e.Source;
RadWindow.Confirm(
"Do you want forward this message to item.DataContext.HandlerName ?",
(sender, e) => {
if (e.DialogResult == true) {
// You can use 'item' here directly.
}
}
);
}
... и вместо этого вы хотите оставить OnConfirmForwarClosed
(предположительно, чтобы подписаться на события, не показанные здесь). Если это правильно, то у вас есть несколько вариантов:
1
Вы можете просто расположить ваши методы по-другому:
void inboxContextMenu_ItemClick(object sender, Telerik.Windows.RadRoutedEventArgs e) {
var item = (RadMenuItem)e.Source;
RadWindow.Confirm(
"Do you want forward this message to item.DataContext.HandlerName ?",
(sender, e) => OnConfirmForwarClosedImp(sender, e, item)
);
}
void OnConfirmForwarClosedImp(object sender, WindowClosedEventArgs e, RadMenuItem item) {
if (e.DialogResult == true) {
if (item != null) {
// Use 'item'.
}
else {
// OnConfirmForwarClosed was called from somewhere else.
}
}
}
void OnConfirmForwarClosed(object sender, WindowClosedEventArgs e) {
OnConfirmForwarClosedImp(sender, e, null);
}
2
Установить поле объекта:
void inboxContextMenu_ItemClick(object sender, Telerik.Windows.RadRoutedEventArgs e) {
item = (RadMenuItem)e.Source;
try {
RadWindow.Confirm(
"Do you want forward this message to item.DataContext.HandlerName ?",
OnConfirmForwarClosed
);
}
finally {
item = null;
}
}
RadMenuItem item = (RadMenuItem)e.Source;
void OnConfirmForwarClosed(object sender, WindowClosedEventArgs e) {
if (e.DialogResult == true) {
if (item != null) {
// Use 'this.item'.
}
else {
// OnConfirmForwarClosed was called from somewhere else.
}
}
}
3.
Выберите один из существующих OnConfirmForwarClosed
параметров:
void inboxContextMenu_ItemClick(object sender, Telerik.Windows.RadRoutedEventArgs e) {
var item = (RadMenuItem)e.Source;
RadWindow.Confirm(
"Do you want forward this message to item.DataContext.HandlerName ?",
(sender, e) => OnConfirmForwarClosed(item, e)
);
}
void OnConfirmForwarClosed(object sender, WindowClosedEventArgs e) {
if (e.DialogResult == true) {
var item = sender as RadMenuItem;
if (item != null) {
// Use 'item'.
}
else {
// OnConfirmForwarClosed was called from somewhere else.
}
}
}
и т. Д. И т. Д. *