2011-02-09 35 views
29

Tôi đang xây dựng một ứng dụng có thể được nhiều người dùng sử dụng. Mỗi người dùng được phân loại theo một trong các cấp Xác thực tiếp theo:Sử dụng enum trong ConverterParameter

public enum AuthenticationEnum 
{ 
    User, 
    Technitian,  
    Administrator, 
    Developer 
} 

Một số điều khiển (như nút) chỉ được hiển thị cho một số người dùng nhất định. tôi có một tài sản chứa mức độ xác thực của người sử dụng hiện tại:

public AuthenticationEnum CurrentAuthenticationLevel { get; set; } 

Tôi muốn để ràng buộc khách sạn này đến tài sản 'visibilty' của một số kiểm soát và thông qua một tham số cho phương thức chuyển đổi, nói với nó là gì mức xác thực thấp nhất có thể thấy điều khiển. Ví dụ:

<Button Visibility="{Binding Path=CurrentAuthenticationLevel, Converter={StaticResource AuthenticationToVisibility}, ConverterParameter="Administrator"}"/> 

có nghĩa là chỉ 'Quản trị viên' và 'Nhà phát triển' mới có thể thấy nút. Thật không may, mã trên vượt qua "Quản trị viên" dưới dạng chuỗi. Tất nhiên tôi có thể sử dụng Switch-Case bên trong phương thức chuyển đổi và chuyển đổi chuỗi thành AuthenticationEnum. Nhưng điều này là xấu và dễ bị lỗi bảo trì (mỗi lần enum thay đổi - phương pháp chuyển đổi nên thay đổi).

Có cách nào tốt hơn để truyền đối tượng không tầm thường dưới dạng tham số không?

+0

bạn không cần phải chuyển 'ConversionParameter' thành chuỗi –

+3

Đặt câu trả lời của Fredrik là đã trả lời. –

+0

Xem phần này để biết các định dạng khác và các chi tiết khác - https://stackoverflow.com/questions/359699/passing-an-enum-value-as-command-parameter-from-xaml – akjoshi

Trả lời

4

tài

(AuthenticationEnum)Enum.Parse(typeof(AuthenticationEnum),parameter) 

để phân tích chuỗi như Enumerator

+2

Sử dụng giá trị enum trực tiếp có hiệu suất tốt hơn chuỗi phân tích cú pháp mỗi lần? – linquize

65

câu trả lời ArsenMkrt là đúng,

Một cách khác để làm điều này là sử dụng x: cú pháp tĩnh trong ConverterParameter

<Button ... 
     Visibility="{Binding Path=CurrentAuthenticationLevel, 
      Converter={StaticResource AuthenticationToVisibility}, 
      ConverterParameter={x:Static local:AuthenticationEnum.Administrator}}"/> 

Và trong bộ chuyển đổi

public class AuthenticationToVisibility : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     AuthenticationEnum authenticationEnum = (AuthenticationEnum)parameter; 
     //... 
    } 
} 
+3

Làm cách nào để chúng tôi có thể thực hiện trong Ứng dụng Windows Store? Có vẻ như x: Tĩnh không thể nhận ra bởi loại dự án này. –

Các vấn đề liên quan