2009-05-25 11 views
1

私はこれでした:他のプロジェクト/名前空間に配置されているコレクションにコンボボックスをバインドする他のプロジェクト/名前空間に含まれるコレクションにバインドする方法は?

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

を。しかし、私はComboBoxをDataTemplateに移動しなければなりませんでした。私は私の試みのすべてをリストする必要はありませんが、どれも成功しなかった

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

今、私はそのような何かをする必要があります。
いいアイデアはありますか?

+0

私はあなたの正確なコードでプログラムをコンパイルして実行しました。私がしなかった唯一のことは、クラスを別のアセンブリに入れることでした。目に会うよりも、これ以上のことがなければなりません。 –

+0

XamlParseExceptionは、具体的に何が不平を言っているかについて詳細を教えてくれますか? ComboBoxからItemsSource属性を削除すると消えますか? –

+0

はい、ItemsSource属性を削除しても例外はありません。そして、私が見ることができるstacktraceに特に不満はありません。 しかし、私はそれをアップロードした、多分私は逃した何かを見つける。 http://www.informatik.uni-rostock.de/~mb004/XamlParseException。txt (そこにはドイツ人のことについて申し訳ありません) –

答えて

3

あなたのXAMLファイルの先頭にXML名前空間に.NET名前空間をマッピングする必要があります。

<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」名前空間にマッピングされています。あなたのModuleManagerによってクラスの静的な「インスタンス」プロパティにアクセスするための静的マークアップ拡張機能:今、あなたは、xを使用することができます

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

それはあなたのために働くかどうかを確認してください。

編集

もう一つ:あなたの「Common.Component」名前空間が別のアセンブリに住んでいる場合は、XAMLを伝えるために必要とする:あなたがかもしれない無関係なノートで

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

これは、コンボボックス –

+0

のロード時にXamlParseExceptionで終了し、これが自動的に追加されました。 –

+0

それは?それは変だ。 VSがそれを見たことはありません。 [ModuleManager]クラスの詳細について質問を更新できますか?それがクラスでインスタンスが静的なプロパティであることは間違いありませんか? XAMLが動作するはずです。 –

0

代わりにパフォーマンスのためにObservableコレクションにバインドします。その他のWPF最適化の詳細here。 ItemsControlにIEnumerableを結合

ラッパーあなたのパフォーマンスが第2のオブジェクトの不要なオーバーヘッドの影響を受ける手段オブジェクト、(<(T>)> OF)のIList <を作成するために、WPFを強制します。

+0

ObservableCollectionは必要ありません。コレクションは、プロジェクトの起動後も変更されません。 –

0

いいえ、私は回避策を見つけました。コレクションが他のアセンブリに含まれている場合は、問題が存在する必要があります。

XAMLとBindingのアセンブリに新しいクラスを追加しました。

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マットご協力ください。

+0

私はまだそれを取得しません。私はこの方法で他のアセンブリでコレクションを使用しました。それでも、あなたはそれが働いてうれしいです! –

+0

私もそれを取得しません。私はプロジェクトのいくつかの部分を変更しましたが、今はそのExcetionをもう一度入手しますが、すべてのPCではありません。この問題は深い内側のwpfから来ているようです。 –

関連する問題