У меня есть ListView, который имеет ObservableCollection в качестве ItemsSource и имеет несколько столбцов. Одним из них является столбец Состояние, который в зависимости от текущего состояния элемента отображает другое сообщение. В настоящее время это реализовано как базовая строка, и хотя она работает, она далеко не красивая и не удобная для пользователя. Я хочу иметь возможность варьировать вид вывода, чтобы он более точно соответствовал состоянию элемента.
Я провел некоторое исследование и знаю, что мне нужно использовать шаблон CellTemplate для отображения на дисплее, но все различные типы шаблонов просто ошеломляют меня, и я не могу понять, куда идти дальше.
Мой код (исключая множество других ошибок списка) выглядит следующим образом:
<ListView Name="itemsListView" ItemsSource="{Binding Source={StaticResource listingDataView}}" IsSynchronizedWithCurrentItem="True">
...
<ListView.View>
<GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Item Information">
...
<GridViewColumn DisplayMemberBinding="{Binding Path=StatusMessage}" Width="283" Header="Status" HeaderContainerStyle="{StaticResource GVHeaderLeftAlignedStyle}" />
</GridView>
</ListView.View>
</ListView>
Да, элементы имеют жестко закодированное «Сообщение о состоянии», которое обновляется вместе с другими свойствами, которые действительно имеют отношение к коду, вызывая ужасное дублирование в другом месте моего кода. (И да, я знаю, что это далеко не красиво, но я тоже хочу улучшить это.) Это свойство будет называться ItemState
, поскольку я не настолько креативен.
Итак, мой вопрос: как я могу изменить этот столбец, чтобы иметь наиболее подходящее отображение для данного состояния? Текстовые описания подходят для многих состояний, но некоторые из них довольно длинные и могут получить пользу от текста с индикатором выполнения помимо него, и, возможно, останется какое-то время. Другое государство получило бы выгоду от наличия гиперссылки, на которую можно нажать Другими словами, я думаю, что мне нужно как минимум 3 разных CellTemplates.
Я понимаю, что это довольно открытый вопрос, который в значительной степени страдает от ошибок проектирования кого-то (= меня), который имеет довольно небольшой опыт работы с WPF, но именно поэтому я надеюсь, что кто-то опытный может установить меня прямо с некоторый базовый код, прежде чем я сделаю еще худший беспорядок, чем я уже сделал. :)