Я настроил ItemSource для ListBox с конвертером:
<ListBox Name="FunctionsListBox"
ItemsSource="{Binding Path=Functions,
Converter={x:Static app:CreatorWindow.FunctionConverter}}"/>
Однако это выглядит уродливо, потому что конвертер конвертирует всю коллекцию - я бы предпочел более универсальный конвертер, который конвертирует только один элемент.Я могу писать без проблем, но как заставить ListBox вызывать конвертер один за другим вместо всех элементов сразу?
Я знаю, что могу быть более сложным и определить ItemTemplate для ListBox:
<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]);
Итак, у меня есть бэкэнд, где я могу получить доступ к данным, и он не зависит от пользовательского интерфейса, и у меня есть пользовательский интерфейс.Чтобы установить связь между backend и frontend, я использую конвертеры, как указано выше.Это минимальный подход к коду и он гибкий.
GeneratorNames - это ассоциативный массив с уникальными ключами и значениями, поэтому вы можете запросить его, используя значение или ключ в качестве индекса.
Добавление нового слоя междуНЕ действительно решает мою проблему, НЕ отвечает на мой вопрос, и даже если мне будет интересно, он добавляет много кода (и именно поэтому я не заинтересован - выше вы видите 2-строчный вкладыш, если что-то лучше, он имеетбыть только в одной строке).