2011-02-10 148 views
1

首先,關於數據綁定幾個問題:棱鏡V4,MEF WPF數據綁定

  • 是對設置到代碼隱藏控件的默認的DataContext?例如,如果我在test.xaml.cs中有一個變量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 /棱鏡的情況?在我的功能區對象上,我嘗試了DataContext="{Binding MenuService}",但沒有奏效。

回答

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。

+0

@Chris:在功能區或RibbonWindow中定義了MenuService嗎? –

+0

IRibbonService接口和RibbonService類在一個名爲Infrastructure的單獨項目中聲明/實例化,並使用MEF導出...然後使用上面問題中使用的代碼導入RibbonWindow。 –

+0

我試着做這樣的事情http://serialseb.blogspot.com/2007/10/wpf-tips-8-use-your-code-behind-for.html其中根xaml元素有一個自我DataContext,但沒有數據綁定,也許是因爲我需要一個DependencyProperty(不確定,我需要閱讀它的用途) –