我正在使用mvvm-light框架处理WPF应用程序。我是这两个人的新手。
我有一个表单,允许用户编辑数据库中的记录。管理员用户需要能够更新对其他用户应该是只读的字段。我很容易将这个启用/禁用代码放在视图的代码隐藏中,但我的理解是它属于ViewModel。
如何在不将代码放入View的情况下隐藏此文本框?
提前致谢。
<TextBox Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" Name="uxMallNum" VerticalAlignment="Center"
Width="100" Height="25" MaxLength="50" Validation.ErrorTemplate="{DynamicResource validationTemplate}" Style="{DynamicResource textStyleTextBox}">
<TextBox.Text>
<Binding Path="MallNumber" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" >
<Binding.ValidationRules>
<local:StringRangeValidationRule MinimumLength="1" MaximumLength="50"
ErrorMessage="Mall Number is required and must be 50 characters or fewer." />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
答案 0 :(得分:1)
我为这种功能构建了一个转换器,虽然我不确定是否有更好的方法。
public class AdminVisibilityConverter : IValueConverter
{
#region Methods
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool isAdmin = WebContext.Current.User.IsInRole("Admin");
return isAdmin ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
然后我将转换器添加到控件的visibility属性中。
<toolkit:AccordionItem Tag="#ManageAnnouncements" Visibility="{Binding Source=User, Converter={StaticResource AdminVisibilityConverter}}">
您可以在转换器的参数中传入角色或用户名,但我的实例不需要它。