WPF: пользовательское перенаправленное событие с дополнительной информацией - PullRequest
1 голос
/ 22 января 2010

У меня есть нормальное окно WPF, назовем его TopLevel, в котором есть множество элементов управления, среди прочего простое ListView, которое должно регистрировать определенные события в различных элементах приложения.

Итак, предположим, у меня есть Grid в TopLevel, который содержит группу пользовательских элементов управления, называемых Task. Каждый Task имеет объект, связанный с ними как открытое свойство, назовем его Order, а также стандартный флажок.

Теперь я хочу, чтобы TopLevel получал событие всякий раз, когда пользователь проверяет флажок в Task, но событие также должно содержать объект Order, поэтому я могу работать с ним из TopLevel, чтобы поставить это в журнал событий.

Как мне это сделать? Я предполагаю, что хочу использовать перенаправленные события для него, но я не могу понять, как установить флажок, нажмите «найти» Order, чтобы отправить его вверх до TopLevel.

1 Ответ

1 голос
/ 22 января 2010

Как на счет этого ...

private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {
        CheckBox checkBox = sender as CheckBox;
        Task task = FindParentTask(checkBox);
        Order order = task.Order;
    }

Так как вам нужно пройти по визуальному дереву, чтобы добраться до Task, вы можете попробовать немного рекурсии ...

public FrameworkElement FindParentTask(FrameworkElement element)
    {
        if (element.Parent.GetType() == typeof(Task))
            return element.Parent as FrameworkElement;
        else
            return FindParentTask(element.Parent as FrameworkElement);
    }

Я только что проверил этот метод, чтобы получить родительский Expander для CheckBox на одном из моих UserControls, он на несколько уровней вверх по визуальному дереву, вложенный в кучу StackPanels, Grids и DockPanels, сработал.

...