Я бы хотел, чтобы мои элементы, сгенерированные из таблицы данных, выглядели по-разному в зависимости от некоторых свойств в модели. Например, я хочу отобразить текст в разных цветах или представить разные изображения или чертеж пути для каждого сгенерированного элемента. Я знаю, как это сделать в целом, но я ищу решение, которое позволило бы редактору редактировать визуальные детали в Expression Blend, не касаясь кода. Например самое простое решение:
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding MyImageSource}"/>
<TextBlock Width="200" Text="{Binding MyText}" Forecolor="{Binding MyColor}"></TextBox>
</StackPanel>
</DataTemplate>
Где «MyImageSource» и «MyColor» являются свойствами модели элемента (типа ImageSource и Brush) не удовлетворяет моим потребностям, потому что я не хочу назначать эти значения. Я хочу, чтобы дизайнер сделал это. Вместо свойств «MyImageSource» и «MyColor» моя модель будет иметь свойство типа «ItemType» или «ItemStyle» типа enum или string (или другого типа). Я не ищу "религиозного" строгого решения MVVM. Мое единственное требование - избегать необходимости, чтобы дизайнер ждал, пока я исправлю код, следуя его инструкциям, таким как «изменить цвет элемента типа X в списке Y на #FFAACC», потому что это похоже на нарушение правила SoC.
РЕДАКТИРОВАТЬ (на основе ответов):
Я нашел решение, похожее на описанное bendewey здесь - оно требует получения пользовательского элемента управления для элемента управления с помощью атрибута ItemsSource. Идея использования разных шаблонов данных для каждого типа элемента изящна, но, на мой взгляд, она охватывает ситуацию, когда мы хотим создать совершенно разные визуальные элементы для каждого элемента. Когда элементы отличаются только по некоторым цветам и изображению (и кроме них содержат много общих элементов), создание отдельной таблицы данных для каждого типа элемента приведет к ненужному повторению кода (xaml). В этой ситуации решение Влада подходит лучше.
Есть ли какая-либо другая техника, кроме этих двух?