首先,关于数据绑定的几个问题:
orderNumber
,我可以在xaml {Binding orderNumber}
中像这样引用它吗?我在一个单独的模块/程序集中有一个Prism服务,我通过MEF导入我的Shell应用程序。我正在尝试对它进行数据绑定,但它似乎没有起作用。
我的解决方法如下。 在我的Shell.xaml.cs中:
[Import(AllowRecomposition = false)]
private IRibbonService _menuService;
public IRibbonService MenuService
{
get
{
return _menuService;
}
}
public void OnImportsSatisfied()
{
Debug.WriteLine("Imports satisfied", "Prism");
this._moduleManager.LoadModuleCompleted += new EventHandler<LoadModuleCompletedEventArgs>(moduleManager_LoadModuleCompleted);
//TODO figure out how to properly bind to the ribbon
Ribbon.DataContext = _menuService;
RibbonAppMenu.DataContext = _menuService.ApplicationMenuData;
}
有没有办法在设置对象之前在xaml中设置datacontext - 特别是在MEF / Prism场景方面?在我的功能区对象上,我尝试DataContext="{Binding MenuService}"
,但这不起作用。
答案 0 :(得分:4)
控件的默认DataContext是否设置为代码隐藏?例如,如果我在test.xaml.cs中有一个变量orderNumber,我可以在xaml {Binding orderNumber}中像这样引用它吗?
没有。默认情况下,没有DataContext,它使用WPF中的层次结构机制从父级继承。如果需要控件,则需要为控件显式设置DataContext。
我只能数据绑定到对象的属性是否正确?
是。您只能绑定到属性。如果您希望双向绑定工作,则该对象也必须是DependencyObject
或实现INotifyPropertyChanged
。
有没有办法在设置对象之前在xaml中设置datacontext - 特别是在MEF / Prism场景方面?在我的功能区对象上,我尝试了DataContext =“{Binding MenuService}”,但这不起作用。
这将尝试使用层次结构将DataContext
设置为包含DataContext的MenuService
属性(即:父控件/窗口的DataContext的MenuService属性)。您无法绑定到自己来设置DataContext。
您可以在XAML中创建一个新对象以用作DataContext,或者让一个包含对象为您提供DataContext。