WPF/C在UserControl中转发事件和数据提供程序值

WPF/C在UserControl中转发事件和数据提供程序值,wpf,user-controls,mvvm,wpf-controls,datacontext,Wpf,User Controls,Mvvm,Wpf Controls,Datacontext,我有一个UserControl,它包含4个ToggleButtons,我想触发一个自定义事件,感兴趣的对象可以根据ToggleButton检查值和DataContext对象的值侦听该事件,该事件提供了一个状态 获取ToggleButton的选中值和导出状态非常简单,但是我无法确定如何在C代码隐藏中访问DataContext对象 例如,如果感兴趣的对象从UserControl接收RouteEvent,我希望它能够从UserControl的DataContext对象访问值 我是否需要从DataCon

我有一个UserControl,它包含4个ToggleButtons,我想触发一个自定义事件,感兴趣的对象可以根据ToggleButton检查值和DataContext对象的值侦听该事件,该事件提供了一个状态

获取ToggleButton的选中值和导出状态非常简单,但是我无法确定如何在C代码隐藏中访问DataContext对象

例如,如果感兴趣的对象从UserControl接收RouteEvent,我希望它能够从UserControl的DataContext对象访问值

我是否需要从DataContext对象公开特定属性,或者我是否可以从UserControl的API公开DataContext对象

使现代化 为了进一步解释这个问题,我有一个项目列表,它在容器中创建了一组UserControl实例,我在每个项目添加到容器时将事件侦听器附加到每个项目,并在单击/检查其子控件时从其中一个UserControl发送一个事件,等等

获取对调度事件的UserControl的引用非常简单,但我无法访问DataContext对象,是否需要分配公共属性以公开DataContext对象

e、 g

还是有更好的办法


任何提示都将不胜感激,谢谢。

嗯,看来我应该先尝试一下最简单的解决方案

…当然,我可以像这样访问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
然后像这样调用事件

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

public event StatusChangedHandler StatusChanged;
StatusChanged.Invoke("message", DataContext as UserControlViewModel) 
// or DataContext as IUserControlModelInterface
这使我能够从UserControl的子控件充分聚合事件,并从事件处理程序访问DataContext模型


我仍然想知道是否有更好的实践方法来做到这一点?

你的意思是想将DataContext传递给UserControl吗?当我从UserControl发送事件消息时,我想从它的DataContext对象发送值,或者通过UserControl的API访问值,这是最好的。