WPF / C # Пересылка событий и значений DataProvider в UserControl - PullRequest
0 голосов
/ 28 сентября 2010

У меня есть UserControl, который содержит 4 ToggleButtons, и я хотел бы вызвать настраиваемое событие, которое может прослушивать заинтересованный объект, которое предоставляет состояние, основанное на проверенных значениях ToggleButton, а также значениях из объекта DataContext.

Получение проверенных значений ToggleButton и получение статуса достаточно просты, однако я не могу понять, как получить доступ к объекту DataContext в коде C #.

Например, если заинтересованный объект получает RoutedEvent от UserControl, я бы хотел, чтобы он мог получить доступ к значениям из объекта DataContext UserControl.

Нужно ли мне предоставлять конкретные свойства из объекта DataContext или я могу каким-либо образом предоставлять объект DataContext из API UserControl?

Update.

Чтобы объяснить проблему немного подробнее, у меня есть список элементов, который создает набор экземпляров UserControl в контейнере, я прикрепляю прослушиватели событий к каждому элементу по мере его добавления в контейнер и отправляю событие из одного из UserControls. когда дочерние элементы управления нажимаются / проверяются и т. д.

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

, например

private ControlViewModel myControlViewModel;
public ControlViewModel MyControlViewModel {
    get { return myControlViewModel; }
    set 
    {   
        this.DataContext = value;
        myControlViewModel = value;
    }
}

или есть лучший способ?

Любые советы будут оценены, спасибо.

1 Ответ

0 голосов
/ 28 сентября 2010

Ну, похоже, я должен был сначала попробовать самое простое решение ...

... конечно, я могу получить доступ к объекту DataContext следующим образом:

(userControl.DataContext as ControlViewModel).requiredProperty;

Обновление

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

public delegate void StatusChangedHandler(string status, UserControlViewModel model);

public event StatusChangedHandler StatusChanged;

И затем просто вызвал событие как это ...

StatusChanged.Invoke("message", DataContext as UserControlViewModel) 
// or DataContext as IUserControlModelInterface

Что позволило мне адекватно агрегировать события из дочерних элементов управления UserContol и получать доступ к модели DataContext из обработчика событий.

Я все еще задаюсь вопросом, существует ли более эффективный способ сделать это?

...