Я использую WPF и обнаружил, что MVVM чаще всего используется с WPF, поощряя перенос логики представления в ViewModel и минимизацию кода программной части.
Однако через некоторое время я обнаружил, что вкладываю больше логики в рассмотрение и делаю такие вещи (XAML):
1 - Создание строки из нескольких элементов:
<TextBlock>
<Run Text="{Binding Prop1}" />
<!--<Run Combined with string.Format />-->
<Run Text="," />
<Run Text="{Binding Prop2}" />
</TextBlock>
2 - Перенос условной логики в триггеры данных:
<TextBox>
<TextBox.Resources>
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding SomeProperty}" Value="value1">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding SomeProperty}" Value="value2">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Resources>
</TextBox>
3 - Использование ContentControl в сочетании с несколькими шаблонами данных для содержимого разного типа:
<UserControl.Resources>
<DataTemplate x:Key="Template1" >
<ContentControl HorizontalContentAlignment="Stretch" Content="{Binding Item}">
<ContentControl.Resources>
<Style TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding HasAnyItem}" Value="True">
<Setter Property="ContentTemplate" Value="{DynamicResource Template2}" />
</DataTrigger>
<DataTrigger Binding="{Binding HasAnyItem}" Value="False">
<Setter Property="ContentTemplate" Value="{DynamicResource Template1}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Resources>
</ContentControl>
</DataTemplate>
<DataTemplate x:Key="Template2" >
...
</DataTemplate>
<UserControl.Resources>
...
<ContentControl ContentTemplate="{StaticResource Template1}" Content="{Binding}"/>
и этот список продолжается, но я предполагаю, что вы имеете общее представление о том, о чем я говорю. Я знаю, что некоторые из этих функций в чем-то прекрасны в WPF.
Но когда дело доходит до ремонтопригодности и гибкости, есть ли лучший способ обработки логики? Делает ли это мой пользовательский интерфейс более чем достаточно умным, что было антипаттерном в дни форм Windows?