2012-03-19 40 views
35

静的プロパティへのWPFバインディングに関する問題があります。私のアプリケーションにはというクラスがあり、グローバルという静的なというプロパティからのThisAddInのプロパティを含んでいます。このオブジェクトは、基本的に私がバインディングで使用したいものであるUserプロパティにアクセスすることを可能にします。だから、私のXAMLは次のようになります。私はを参照してくださいする方法の異なるアプローチのトンを見つけStaticExtensionの値を解決できません。

xmlns:s="clr-namespace:ConsoleApplication16.Model" 

<TextBlock Text="{Binding Path=User.Name 
        , Source={x:Static Member=s:Globals.ThisAddIn}}" /> 

名前空間は、次の行で先頭で宣言されましたXAMLのstaticプロパティですが、これ以外のものは動作しません。これも私にとって最も論理的なようです。私が見つけたいくつかのサンプルは、パスまたはメンバーをまったく使用しませんでした。

いくつかのテストの結果、適切な方法を見つけたので、「x:静的メンバー」を使用してクラスと静的プロパティを定義し、Pathはこのオブジェクトの中の正しいプロパティをこのオブジェクトの中に定義します通常のバインディングが行います。

このソリューションは何の不満なくコンパイルされますが、StaticExtension値を列挙型、静的フィールドまたは静的プロパティに解決できないことをXAMLParseExceptionが直接ポップアップして表示します。

+1

それが例外をスローした場合はどのように正確ということは、 '右way'のですか? –

+0

また、 'Path ='と 'Member ='を削除できるのは、関連するプロパティを設定するそれぞれのコンストラクタを呼び出すためです。 –

+0

私は通常、{Binding Source = {x:Static local:MyStaticClass.SomeStaticProperty.PropertyName} 'を使って静的クラス/プロパティにバインドします。あなたのプロパティに 'get /' set'アセッサーがあることを確認してください。たとえば、 'public string PropertyName {get;セット; } 'public string PropertyName;の代わりに'} '@ – Rachel

答えて

63

Globals.ThisAddInがpublicであることを確認します。また、リソースファイルを使用している場合は、アクセス修飾子がpublicに設定されている必要があります。

+7

それだけです!これは、設計時にプロパティ値が正しく設定されていることを意味していませんでしたが、実行時にはこの例外が発生して失敗します。とても混乱するような。 – Steztric

+1

ホーリー・モリー、そうだよ! @Steztricが書いているのと同じように、 "ExtensionValueを解決できません"というように、コードデザイナーが設計時に自分のリソースにアクセスできるようになることは決して夢にも思いませんでした。どうもありがとう! – Informagic

+1

私のresxファイルに内部修飾子が付いていたので、ここに来ました。それをpublicに変更してください。 同じように、設計時には、veeeeryは混乱します –

7

出力ライブラリプロジェクトでは、デフォルトでResXFileGodeGeneratorの代わりにResources.resxファイルのジェネレータがPublicResXFileCodeGeneratorとして変更されていることを確認する必要があります。

と、次の置換...

Not public resource

この1

correct public resource

関連する問題