如何解决以下(简化)问题?M-V-VM上下文。我想在UI上显示文本。如果用户有权更改文本,我希望使用文本框来操作文本。在用户没有权限的情况下,我希望使用标签来仅显示文本。我的主要问题是:如何分别交换文本框和标签以及绑定文本。将内容添加到viewmodel中的同一属性。
谢谢你的回答,托尼
发布于 2010-04-15 23:30:01
有几种方法可以实现这一点,具有不同程度的重用。您可以有一个DataTemplateSelector,它可以为给定的属性返回适当的DataTemplate (根据这段代码的编写方式,您可以对每个属性使用它)。
您可以为每个属性创建一个DataTemplate,并基于DataTrigger更改可见性(这会变得非常烦人,因为它需要大量的复制和粘贴)。
我认为最简单的方法是为TextBox提供一个专门的ControlTemplate。基本上,当它被禁用时,你可以让它看起来像一个TextBlock,而不是变灰:
<ControlTemplate x:Key="PermissionedTextBox" TargetType="{x:Type TextBox}">
<Border x:Name="bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
<ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="bd" Property="BorderBrush" Value="{x:Null}" />
<Setter TargetName="bd" Property="Background" Value="{x:Null}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>然后你可以像这样使用它:
<TextBox Text="{Binding PermissionedText}" IsEnabled="{Binding CanEdit}" />https://stackoverflow.com/questions/2646526
复制相似问题