Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Prism v4,MEF WPF数据绑定_C#_Wpf_Data Binding_Prism_Mef - Fatal编程技术网

C# Prism v4,MEF WPF数据绑定

C# Prism v4,MEF WPF数据绑定,c#,wpf,data-binding,prism,mef,C#,Wpf,Data Binding,Prism,Mef,首先,关于数据绑定的几个问题: 控件的默认DataContext是否设置为codebehind?例如,如果我在test.xaml.cs中有一个变量orderNumber,我可以在xaml{Binding orderNumber}中这样引用它吗? 我只能将数据绑定到对象的属性,对吗? 我在一个单独的模块/程序集中有一个Prism服务,我通过MEF将其导入Shell应用程序。我正在尝试对它进行数据绑定,但它似乎不起作用 我的解决方法如下。 在my Shell.xaml.cs中: 是否有一种方法可以在

首先,关于数据绑定的几个问题:

控件的默认DataContext是否设置为codebehind?例如,如果我在test.xaml.cs中有一个变量orderNumber,我可以在xaml{Binding orderNumber}中这样引用它吗? 我只能将数据绑定到对象的属性,对吗? 我在一个单独的模块/程序集中有一个Prism服务,我通过MEF将其导入Shell应用程序。我正在尝试对它进行数据绑定,但它似乎不起作用

我的解决方法如下。 在my Shell.xaml.cs中:

是否有一种方法可以在设置对象之前在xaml中设置datacontext?特别是在MEF/Prism场景中?在ribbon对象上,我尝试了DataContext={Binding MenuService},但没有成功

控件的默认DataContext是否设置为codebehind?例如,如果我在test.xaml.cs中有一个变量orderNumber,我可以在xaml{Binding orderNumber}中这样引用它吗

否。默认情况下,没有DataContext,它是使用WPF中的层次结构机制从父级继承的。如果希望控件具有DataContext,则需要显式设置该控件的DataContext

我只能将数据绑定到对象的属性,对吗

对。只能绑定到属性。如果希望双向绑定工作,则该对象还必须是DependencyObject或实现INotifyPropertyChanged

是否有一种方法可以在设置对象之前在xaml中设置datacontext?特别是在MEF/Prism场景中?在ribbon对象上,我尝试了DataContext={Binding MenuService},但没有成功

这将尝试使用层次结构(即父控件/窗口的DataContext的MenuService属性)将DataContext设置为包含DataContext的MenuService属性。您不能绑定到自己来设置DataContext

您可以在XAML中创建一个新对象用作DataContext,或者让一个包含对象为您提供DataContext

控件的默认DataContext是否设置为codebehind?例如,如果我在test.xaml.cs中有一个变量orderNumber,我可以在xaml{Binding orderNumber}中这样引用它吗

否。默认情况下,没有DataContext,它是使用WPF中的层次结构机制从父级继承的。如果希望控件具有DataContext,则需要显式设置该控件的DataContext

我只能将数据绑定到对象的属性,对吗

对。只能绑定到属性。如果希望双向绑定工作,则该对象还必须是DependencyObject或实现INotifyPropertyChanged

是否有一种方法可以在设置对象之前在xaml中设置datacontext?特别是在MEF/Prism场景中?在ribbon对象上,我尝试了DataContext={Binding MenuService},但没有成功

这将尝试使用层次结构(即父控件/窗口的DataContext的MenuService属性)将DataContext设置为包含DataContext的MenuService属性。您不能绑定到自己来设置DataContext


您可以在XAML中创建一个新对象用作DataContext,或者让一个包含对象为您提供DataContext。

@Chris:MenuService是在Ribbon还是RibbonWindow中定义的?IRibbonService接口和RibbonService类在名为Infrastructure的单独项目中声明/实例化,并随MEF一起导出。。。然后用上面问题中使用的代码导入RibbonWindow。我尝试过这样做,根xaml元素的DataContext为self,但没有数据绑定,可能是因为我需要DependencyProperty不确定,我需要仔细阅读一下用过的东西for@Chris:MenuService是在Ribbon还是RibbonWindow中定义的?IRibbonService接口和RibbonService类在名为Infrastructure的单独项目中声明/实例化,并与MEF一起导出。。。然后用上面问题中使用的代码导入RibbonWindow。我尝试过这样做,根xaml元素的DataContext为self,但没有数据绑定,可能是因为我需要DependencyProperty不确定,我需要了解它的用途
[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;
}