我正在构建一个基于MEF的模块加载框架......基本布局是主MEF应用程序加载模块和数据绑定到各种导出对象,包括模块的功能区和模块主视图(作为UserControl)。
在模块中,Ribbon在一个XAML文件中定义为ResourceDictionary,主视图(模块的窗口内容)在单独的XAML文件中定义为UserControl。
MEF Framework App的主窗口XAML绑定模块的usercontrol和功能区。使用功能区,它还将功能区的Tag依赖项属性链接到UserControl。这样,实际的模块功能区可以访问UserControl(用于确定在网格中选择哪些元素)。
这一切都很好......标签与UserControl正确关联。我遇到的问题是在模块的功能区中。我尝试绑定到UserControl中的子元素,绑定失败。以下是模块的功能区绑定失败的示例:
<ribbon:RibbonButton
Command=”blah”
Label={“Binding RelativeSource={RelativeSource AncestorType=ribbon:Ribbon},
Path=Tag.Username.Text}”/>
正如我所提到的,Tag正确解析为模块的UserControl ...但是我在Username上找到了绑定错误(找不到属性)。
以下是我如何在MEF Framework App的主窗口中绑定Tag属性:
<ribbon:Ribbon x:Name=”Ribbon”
DataContext=”blah”,
Tag=”{Binding ElementName=RibbonWindow,
Path=DataContext.ModuleList.CurrentItem.View}”>
顺便说一下,我不能使用Prism ......