WPF / C#在UserControl中转发事件和DataProvider值

时间:2010-09-28 03:20:18

标签: wpf user-controls mvvm wpf-controls datacontext

我有一个包含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;
    }
}

还是有更好的方法吗?

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

1 个答案:

答案 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模型。

我仍然想知道是否有更好的做法可以做到这一点?