2009-05-25 57 views
1

我這樣做:如何綁定到其他項目/名稱空間中包含的集合?

this.combobox.ItemsSource = Common.Component.ModuleManager.Instance.Modules; 

將ComboBox綁定到一個集合,它位於一個其他項目/命名空間。但我不得不將ComboBox移動到DataTemplate中。

現在我需要做這樣的事情:

<ComboBox ItemsSource="{Binding Common.Component.ModuleManager.Instance.Modules}"/> 

我不想列出所有我的嘗試,但沒有成功。
有什麼更好的想法?

+0

我剛剛編譯並運行一個程序與您的確切代碼 - 工作正常。我沒有做的唯一事情就是把課程放到不同的程序集中。必須有更多的東西比滿足眼睛。 – 2009-05-25 23:24:59

+0

XamlParseException是否提供了有關它具體抱怨的具體細節?如果從ComboBox中刪除ItemsSource屬性,它會消失嗎? – 2009-05-25 23:59:33

+0

是的,如果我刪除ItemsSource屬性沒有例外。並沒有特別抱怨我能看到的堆棧跟蹤。 但我上傳了它,也許你找到了我錯過的東西。 http://www.informatik.uni-rostock.de/~mb004/XamlParseException。txt (抱歉,德國人在那裏) – 2009-05-26 08:22:13

回答

3

你需要的.NET命名空間XML命名空間在您的XAML文件的頂部映射:

<Window 
    x:Class="WindowsApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:q="clr-namespace:Common.Component"> 

所以現在「Q」被映射到「Common.Component」命名空間。現在,您可以使用x:Static標記擴展來訪問ModuleManager類的靜態「Instance」屬性:

<ComboBox 
    ItemsSource="{Binding Modules,Source={x:Static q:ModuleManager.Instance}}" /> 

看看是否適合您。

編輯

一兩件事:如果你的「Common.Component」命名空間住在單獨的程序,你需要告訴XAML是:

xmlns:q="clr-namespace:Common.Component;assembly=CommonAssemblyFilename" 
0

在一個不相關的註釋您可能想要綁定到Observable集合而不是性能。更多WPF優化細節here

綁定的IEnumerable到一個ItemsControl迫使WPF創建包裝的IList <(中<(T>)>)對象,這意味着您的性能是由第二個對象的不必要的開銷的影響。

0

好的,我找到了一個解決方法。如果該集合包含在其他程序集中,則必定存在問題。

我向XAML和綁定的程序集添加了一個新類。

public static class ResourceHelper 
{ 
    public static IEnumerable<Common.Component.Module> Modules = Common.Component.ModuleManager.Instance.Modules; 
} 

然後我改變了結合

<ComboBox ItemsSource="{Binding Path=.,Source={x:Static e:ResourceHelper.Modules}}"/> 

這工作得很好。
Thx Matt爲您提供幫助。

相關問題