2009-11-30 2 views
5

コレクション内のアイテムにバインドしようとしていますが、そのアイテムのインデックスは「可変」である必要があります。 例えば、次の擬似構文を取る:コレクションアイテムへの変数バインディングが可能です

<TextBlock Text="{Binding Fields[{Binding Pos}]}" /> 

は、この可能性のようなものですか?プロパティPosが1の場合は、コレクション "Fields"の最初の項目にバインドし、Posが3の場合はコレクションの3番目の項目にバインドする必要があります。私はこの状況に私の問題を簡略化しました...

このようなものは何ですか?

答えて

0

なぜコレクションの現在のアイテムを返し、WPFコントロールにバインドするプロパティを使用しないのですか?

class myCollection 
{ 

    private string _current; 

    public string CurrrentField 
    { 
     get { return _current; } 
    } 

    // TODO: Set current item to whatever the current item is... 
} 

EDIT:私はあなたの中のアイテムで、あなたのデータグリッドと整列して、あなたの列を追跡するヘルパークラスを作成する必要があると思うその場合

など

UIにバインドされているプロパティが正しく更新されるようにします。

まず、コレクションに何個のアイテムがあるかを知ってから、ヘルパークラスでコレクションをループし、アイテムにアイテムを割り当て、グリッドの次の列に移動します。

自分でアルゴリズムを書くことになると思います。

+0

原因コレクションのすべての要素を別のバインディングで使用しています。私が言ったように、これは単なる問題そのものの単純化です。 私はそれをデータグリッドの列で使用していますが、データグリッドのすべての列が同じテンプレートを使用するようにしたいのですが(最初の列はFields [0]へのバインディングを持ち、2番目はFields [1] uiが将来どのくらいの数のカラムを持っているのかわかりませんが、それはデータベースから生成されたものです)。基本的には上記の問題を解決することになります。この可能性を示唆してくれてありがとう。 – Jan

5

はい、可能です。コレクションをコレクションアイテムに変換し、コンバータパラメータとしてインデックスを取得するバインディングコンバータを実装する必要があります。次に、このように使用します:

<TextBlock Text="{Binding Fields, 
        Converter={StaticResource CollectionToItemConverter, 
        ConverterParameter={Binding Pos}}}" /> 

このコンバーターのコードやコンバーターに関する追加情報が必要な場合は、コメントを残してください。

希望します。

+0

ありがとうございます。これは私にとって本当に良い音です。 – Jan

+0

それを聞いてうれしい! =) これはあなたのために働いた場合、答えを受け入れることを忘れないでください。 =) – levanovd

+0

ある日、私は結婚するようにIValueConverterに依頼します。 – cwap

1

ICollectionViewでの読み取りを試してください...あなたのテキストをバインドするアイテムのインデックスを自動的に与えることができます。

関連する問題