コンバーターを使用して 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行だけにする必要があるものは何でも良いです)。