我正在使用 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 的美丽之处。
但是说到可维护性和灵活性,有没有更好的逻辑处理方式呢?它是否使我的 UI 变得足够聪明,这在 Windows 窗体时代是一种反模式?