2010-09-24 48 views
1

我正在使用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> 

回答

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

您可以在轉換器的參數中傳入角色或用戶名,但我的實例不需要它。

+0

WebContext暗示您正在使用Silverlight和RIA服務。這個問題是關於WPF的... – 2010-09-25 12:15:56

+0

糟糕,很好。您可以用WPF版本替換WebContext。也許是Threading.Thread.CurrentPrincipal。 – 2010-09-26 02:27:03

+0

雖然他在正確的軌道上。這是做這件事的好方法。我將有一個「SecurityService」類和一個方法來返回當前用戶的角色等。 – 2010-09-30 17:06:49