我有一个包含4个ToggleButtons的UserControl,我想根据ToggleButton Checked值以及DataContext对象的值触发感兴趣的对象可以监听的自定义事件,该事件提供状态。
获取ToggleButton选中的值并获取状态很简单,但是我无法弄清楚如何在C#代码隐藏中访问DataContext对象。
例如,如果感兴趣的对象从UserControl接收RoutedEvent,我希望它能够从UserControl的DataContext对象访问值。
我是否需要从DataContext对象公开特定属性,还是可以以某种方式从UserControl的API中公开DataContext对象?
为了解释这个问题,我有一个项目列表,它在容器中创建了一组UserControl实例,我将事件监听器附加到每个项目,因为它被添加到容器中并从其中一个UserControls发送事件当它的子控件被点击/检查等时。
获取对调度事件的UserControl的引用非常简单,但我无法访问DataContext对象,是否需要分配公共属性以公开DataContext对象...
e.g。
private ControlViewModel myControlViewModel;
public ControlViewModel MyControlViewModel {
get { return myControlViewModel; }
set
{
this.DataContext = value;
myControlViewModel = value;
}
}
还是有更好的方法吗?
任何提示都将不胜感激,谢谢。
答案 0 :(得分:0)
好吧,看起来我应该先尝试最简单的解决方案......
...当然我可以像这样访问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模型。
我仍然想知道是否有更好的做法可以做到这一点?