Wpf 使用角色/权限启用/禁用视图中的内容

Wpf 使用角色/权限启用/禁用视图中的内容,wpf,mvvm,mvvm-light,Wpf,Mvvm,Mvvm Light,我正在使用mvvm light框架开发一个WPF应用程序。这两个我都是新手 我有一个表单,允许用户编辑数据库中的记录。管理员用户需要能够更新其他用户应为只读的字段。对我来说,将此启用/禁用代码放在视图的代码中是很容易的,但我的理解是,这属于ViewModel 如何在不将代码放入视图的情况下隐藏此文本框 提前谢谢 <TextBox Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" Name="uxMallNum"

我正在使用mvvm light框架开发一个WPF应用程序。这两个我都是新手

我有一个表单,允许用户编辑数据库中的记录。管理员用户需要能够更新其他用户应为只读的字段。对我来说,将此启用/禁用代码放在视图的代码中是很容易的,但我的理解是,这属于ViewModel

如何在不将代码放入视图的情况下隐藏此文本框

提前谢谢

        <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>

我已经为这种类型的函数构建了一个转换器,尽管我不确定是否有更好的方法

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
}
然后我将转换器添加到控件的可见性属性中

<toolkit:AccordionItem Tag="#ManageAnnouncements" Visibility="{Binding Source=User, Converter={StaticResource AdminVisibilityConverter}}">


您可以在转换器的参数中传递角色或用户名,但我的实例不需要它。

我已经为这种类型的函数构建了一个转换器,尽管我不确定是否有更好的方法

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
}
然后我将转换器添加到控件的可见性属性中

<toolkit:AccordionItem Tag="#ManageAnnouncements" Visibility="{Binding Source=User, Converter={StaticResource AdminVisibilityConverter}}">


您可以在转换器的参数中传递角色或用户名,但我的实例不需要它。

WebContext意味着您正在使用Silverlight和RIA服务。问题是关于WPF…哦,好的。您可以用WPF版本替换WebContext。也许是线程,线程,当前主体,但他走对了方向。这是一个很好的方法。我将有一个“SecurityService”类,其中包含一个返回当前用户角色的方法,等等。WebContext暗示您正在使用Silverlight和RIA服务。问题是关于WPF…哦,好的。您可以用WPF版本替换WebContext。也许是线程,线程,当前主体,但他走对了方向。这是一个很好的方法。我将有一个“SecurityService”类,其中包含一个返回当前用户角色等的方法。