2

キーが列挙型である辞書のエントリにデータバインドしようとしています。この質問を参照しましたが、答えがうまくいきません。これが私のコードのボイラープレート以外の部分です:


SomePage.xaml:

<!-- Here I try all the ways I can think of. None of them produce any text -->
<TextBlock Text="{Binding Data[0]}" />
<TextBlock Text="{Binding Data[EnumValueA]}" />
<TextBlock Text="{Binding Data[SomeEnum.EnumValueA]}" />
<TextBlock Text="{Binding Data[(local:SomeEnum)EnumValueA]}" />
<TextBlock Text="{Binding Data[(local:SomeEnum)SomeEnum.EnumValueA]}" />

SomePage.xaml.cs:

public SomePage() {
    DataContext = new SomeVM();
    InitializeComponent();
}

SomeVM.cs:

public enum SomeEnum {
    EnumValueA, EnumValueB
}
public class SomeVM {
    public Dictionary<SomeEnum, int> Data { get; private set; }
    public SomeVM() {
        Data = new Dictionary<SomeEnum, int> {
            {SomeEnum.EnumValueA, 1337}
        };
    }
}

このデータバインディングが機能しないのはなぜですか?

4

1 に答える 1

1

それは不可能。http://msdn.microsoft.com/en-us/library/cc645024(v=vs.95).aspx#indexdataを参照して ください。

インデクサー

インデクサーは、パス内のプロパティにアクセスし、リストから項目を取得するために使用できますが、いくつかの重要な制限があります。

  • リスト項目
  • 数値整数インデクサーがサポートされています。
  • Silverlight 4 以降では、文字列インデクサーがサポートされています。
  • 1 次元配列のインデックス付けのみがサポートされています。

インデックスが作成される型は、IList を実装または継承する必要があります。(List は IList を実装しているため、受け入れられます。ただし、IList は受け入れられません。)

数値整数インデックスは、プロパティ名の後の角かっこ ([]) 文字内でゼロベースのインデックスを宣言することによって指定されます。たとえば、従業員[2]。

プロパティ パスの評価では、最初にコレクションの整数インデックスを使用しようとします。そのインデックスがコレクションに対して有効でない場合、[] 内の情報は文字列として処理されます。プロパティ パスからの文字列のインデックス作成では、通常、文字列キーを持つディクショナリであるコレクション/ビジネス オブジェクトが必要です。文字列のインデックス作成は、データ ソースの CLR 構造が変更される可能性がある動的データ オブジェクトへのバインディングをサポートしますが、文字列キーは、クライアント UI によって引き続きバインドできるデータ コントラクトを表します。

検証では、プロパティ パスの使用の一部として、インデクサーを使用して、添付プロパティのコレクションの項目にアクセスします。アプリケーションの検証構造は、検証エラーが発生した場合にのみ使用されるテンプレート内で UI 状態を宣言し、そのコンテキストでアクティブなエラー オブジェクトを参照できます。たとえば、次は Validation.Errors コレクションの最初の項目にアクセスするバインディングのプロパティ パスです。プロパティ パスのコンテキストが RelativeSource によって変更され、適用されたテンプレートで実行時にのみエラーがチェックされるようになります。

 <TextBlock Text="{Binding RelativeSource={RelativeSource
    TemplatedParent}, Path=(Validation.Errors)[0].Exception.Message }">
于 2012-12-05T00:25:51.360 に答える