2014-01-03 2 views
0

Я хочу, чтобы создать пользователь проверку прав доступа к моей системе, я создал enum class Permission содержал все типы разрешений, пример: CanInsert, CanEdit, CanAccess, CanDelete и т.д ...IValueConverter не работает

И в моем class User имеет список свойств содержал все разрешения у этого пользователя

Я создал converterPermissionToVisibleHiddenConverter для использования в Видимость управления

public class PermissionToVisibleHiddenConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     User loger = (User)value; 

     /* Before edit 
     if (loger.Permissao.Contains(Permission.Principal_AbrirLoja)) 
      return Visibility.Collapsed; 
     else 
      return Visibility.Collapsed; */ 

     if (loger.Permissao.Contains(Permission.Principal_AbrirLoja)) 
      return Visibility.Visible; 
     else 
      return Visibility.Collapsed; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Но это не работает, когда я т чень связывание с этим кодом

<!--<MenuItem Header="Abrir loja" Visibility="{Binding Loger, Converter={StaticResource BoolToVisibleHiddenConverter}, ElementName=window, TargetNullValue=Collapsed, Mode=OneWay}"/>--> 
<MenuItem Header="Abrir loja" Visibility="{Binding Loger, Converter={StaticResource PermissionToVisibleHiddenConverter }, ElementName=window, TargetNullValue=Collapsed, Mode=OneWay}"/> 

Где окно это MenuItem родитель это похоже, но Loger не является нулевым

public partial class MainWindow : Window 
{ 
    User Loger { get; set; } 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 
} 

Этот код не будет бросать любое исключение или ошибку, просто ничего не делать

Где проблема?

+2

В состоянии 'loger.Permissao.Contains (Permission.Principal_AbrirLoja)' вы в обоих случаях возвращение 'Visibility.Collapsed'. Так задумано или это опечатка? –

+0

Да, я положил его на тест, но мой MenuItem всегда видимый – Lai32290

+0

В 'MenuItem' вы используете' BoolToVisibleHiddenConverter', но в вопросе было указано 'PermissionToVisibleHiddenConverter' ... возможно для теста. Во всяком случае, попробуйте установить 'Mode =" TwoWay "' и удалить 'ElementName' (вы также можете удалить 'TargetNullValue'), возможно, поможет. –

ответ

1

1) Ваша собственность не является публичной 2) Вы должны уведомить

public partial class Window1 : Window,INotifyPropertyChanged 
{ 
    public Window1() 
    { 
     InitializeComponent(); 
    } 

    User loger; 

    public User Loger 
    { 
     get{return loger;} 
     set { loger= value; OnPropertyChanged("Loger "); } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 
+0

Большое вам спасибо! Я ставлю собственность публичной и, если работаю !! – Lai32290

Смежные вопросы