2

多くの ObservableCollections がある MVVM パターンを使用する WPF アプリケーションがあります。これらの ObservableCollection を各 ViewModel に配置する代わりに、静的クラス AppCommon のメンバーである Observables という静的クラスに配置しました。したがって、AppCommon.Observables.AnyObservableINeed を介してすべての監視可能なコレクションにアクセスできます。

ここで、UserControl のバインディングを変更して、これらのグローバル ObservableCollection にバインドする必要がありますが、DataContext を変更せずにこれらの ObservableCollection を参照する方法がわかりません。

のような名前空間を追加してみました

xmlns:globals="clr-namespace:Demirbaş.Globals"

次に、ListBox で ItemsSource プロパティを次のように設定します。

<ListBox ItemsSource="{Binding Source={globals:Observables.TaşınırSınıfları}}"

しかし、それは私に次のエラーを与えるでしょう:

'{globals:Observables.TaşınırSınıfları}' value is not a valid MarkupExtension expression. Cannot resolve 'Observables.TaşınırSınıfları' in namespace 'clr-namespace:Demirbaş.Globals'. 'Observables.TaşınırSınıfları' must be a subclass of MarkupExtension. 

ここで何が問題なのですか?これらのコレクションにバインドするために正しい XAML 構文を使用していますか?

EDIT ItemsSource="{Binding Source={x:Static globals:AppCommon.Observables.TaşınırSınıfları}}"は私にエラーを与えます:

Cannot find the type 'AppCommon.Observables'. Note that type names are case sensitive.

ネストされたクラスを参照できないと思いますが、そうですか? 解決策は何ですか?

ありがとう

4

3 に答える 3

2

アプリケーションの名前空間はわかりませんが、試してみてください

xmlns:local="clr-namespace:Demirbaş"

<ListBox ItemsSource="{Binding 
    Source={x:Static local:AppCommon+Observables.TaşınırSınıfları}}" />
于 2012-04-27T08:06:49.060 に答える
2

WPF に静的オブジェクトであることを伝えるには、コメントで提案されている LPL のようなx:Staticマークアップ拡張機能を使用する必要があります。

<ListBox ItemsSource="{Binding 
    Source={x:Static globals:Observables.TaşınırSınıfları}}" />
于 2012-04-26T16:02:46.127 に答える
0

このエラーは、名前空間参照が完全修飾されておらず、ターゲット バインディングが別のアセンブリに存在する場合にも発生する可能性があります。

例えば、xmlns:l="clr-namespace:AssemblyA.Namespace;assembly=AssemblyA".

特定のアセンブリが指定されていない場合、「値は有効な MarkupExtension 式ではありません」という同じエラー メッセージが表示されます。

于 2014-05-28T03:46:57.690 に答える