1

コンバーターを使用して ListBox の ItemSource をセットアップします。

<ListBox Name="FunctionsListBox"  
         ItemsSource="{Binding Path=Functions,
                       Converter={x:Static app:CreatorWindow.FunctionConverter}}"/>

ただし、コンバーターはコレクション全体を変換するため、これは私には醜く見えます。単一のアイテムのみを変換する、より用途の広いコンバーターを好むでしょう。私は問題なく書くことができますが、一度にすべてのアイテムではなく、ListBoxにコンバーターを1つずつ呼び出すように強制するにはどうすればよいですか?

もっと精巧に、ListBox の ItemTemplate を定義できることはわかっています。

<ListBox.ItemTemplate>
    <DataTemplate>
        <Label Content="{Binding Converter={x:Static app:CreatorWindow.FunctionConverter}}"/>
    </DataTemplate>
</ListBox.ItemTemplate>

しかし、これは ListBox で使用されるウィジェットに干渉し、少し長くなります。

では、どうやってそれを行うか - 簡単に言えば?うるさくてごめんなさい、私はきれいなコードが好きです:-)

オフトピック

私は答えが完全に間違った方向に進む可能性があると感じている (そして見ている) ので、これが私の FunctionConverter です。

FunctionConverter = LambdaConverter.Create((GeneratorEnum e) => GeneratorsFactory.GeneratorNames[e],
                                           (string s) => GeneratorsFactory.GeneratorNames[s]);

したがって、データにアクセスできるバックエンドがあり、UI に依存せず、UI があります。バックエンドとフロントエンド間のリンクを確立するには、上記のコンバーターを使用します。これは最小限のコード アプローチであり、柔軟性があります。

GeneratorNames は一意のキーと値を持つ連想配列であるため、値またはキーをインデックスとして使用してクエリを実行できます。

間に新しいレイヤーを追加しても、私の問題は実際には解決されず、私の質問には答えられません。また、興味があるとしても、多くのコードが追加されます (そして、それがまさに私が興味がない理由です。上記の 2 ライナーが表示されている場合1行だけにする必要があるものは何でも良いです)。

4

1 に答える 1

-2

MVVMを使用していますか?もしそうなら、いつでもそこで変換を行い、UI が使用する変換された項目を含むプロパティを公開するだけです。そうでない場合は、試してみることをお勧めします。それはあなたのコードをよりきれいにします。=)

于 2010-08-31T20:59:04.993 に答える