2011-05-03 58 views
1

在一個表單中,我有一個用於每個返回字段的用戶控件。該控件由堆棧面板中的一個標籤和一個texblock組成。此控件是構成我的表單的數據模板的一部分,它由包含用戶控件的包裝面板組成。我的意圖是呈現表單來評估我的模型中返回的綁定屬性,並且它是否將控件的可見性設置爲摺疊狀態。目的是僅在表單中呈現具有返回數據的字段。包裝面板允許控件保持內聯,同時允許表單中的多餘空白。collapse Silverlight中的UIElements基於模型中的數據的LOB應用程序

我最初的想法是遍歷返回的List,如果模型中的屬性爲null,則將控件的可見性設置爲通過依賴項屬性摺疊。我在這裏擔心的是性能,因爲某些表單有超過700個字段/屬性。

我很好奇,看看是否有人已經做了他們用什麼辦法來控制UI元素的知名度

在此先感謝您的任何建議

類似的方法或

回答

0

我們使用依賴屬性確定的控制可視性。我們與我們的授權庫協同工作。因此,在我們的XAML,代碼看起來是這樣的:

<ListBoxItem x:Name="About" 
    Content="About Us" 
    AuthLib:Authorization.Visibility="WebUser" 
    Margin="10,5,10,5" /> 
<ListBoxItem x:Name="Accounting" 
    Content="Work Order Acct" 
    AuthLib:Authorization.Visibility="Admin, Accounting,Finance" 
    Margin="10,5,10,5" /> 

凡WEBUSER任何身份驗證的用戶,顯然會計/財務/管理角色有升高的privilages。

我們在頁面上打了幾十個電話,但沒有發現任何問題,但沒有任何問題。可能值得複製/粘貼,看看它是如何。

在情況下,它是值得的,這裏是我們的驗證庫中的可見性屬性:

#region Visibility 

    public static string GetVisibility(UIElement obj) 
    { 
     return (string)obj.GetValue(VisibilityProperty); 
    } 
    public static void SetVisibility(UIElement obj, string value) 
    { 
    obj.SetValue(VisibilityProperty, value); 
    } 

    /// Using a DependencyProperty as the backing store for requiresRole. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty VisibilityProperty = DependencyProperty.RegisterAttached(
    "Visibility", 
     typeof(string), 
     typeof(Authorization), 
    new PropertyMetadata(Visibility_Callback)); 
    // This callback will be invoked when some control will receive a value for your 'Visibility' property 
    private static void Visibility_Callback(DependencyObject source, DependencyPropertyChangedEventArgs e) 
    { 
     var uiElement = (UIElement)source; 

     if (App.IsAuthenticated) 
     { 
      RecalculateControlVisibility(uiElement); 
     } 
     else 
     { 
      EventHandler eh = null; 
      eh = delegate 
      { 
       RecalculateControlVisibility(uiElement); 
      }; 
      App.Authenticated += eh; 
       RecalculateControlVisibility(uiElement); 
     } 
    } 

    private static void RecalculateControlVisibility(UIElement control) 
    { 
     //Authorization.UserHasRole() - is your code to check roles 
     if (Authorization.UserHasRole(GetVisibility(control))) 
     { 
      control.Visibility = Visibility.Visible; 
     } 
     else 
     { 
      control.Visibility = Visibility.Collapsed; 
     } 
    } 

    #endregion 
+0

感謝斯科特,這是沿着我在想什麼線。感謝您驗證我的方法。 – rlcrews 2011-05-04 12:42:00

相關問題