2010-12-01 27 views
3

我需要將控件名稱傳遞給安全對象中的方法,該方法返回IsEnabled屬性的布爾值和另一種返回其可見性(摺疊,隱藏或可見)的方法。這兩者都必須經過檢查才能獲得許可。綁定一個按鈕IsEnabled /可見性屬性使用它的x:Name作爲代碼隱藏方法中的參數

我已經嘗試使用ObjectDataProvider,但所有示例僅顯示來自參數文本框的用戶輸入。我特別需要將控件名稱傳遞給基於按鈕的x:Name屬性的方法。

什麼是處理這個問題最簡單和最有效的方法。提前致謝。

UPDATE: 我試圖用一個轉換器,這是我想出了轉換方法:

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (values != null) 
     { 
      DataTable tblPermissions = (DataTable)values[0]; 
      string sFunctionName = values[1].ToString(); 

      DataRow[] rows = tblPermissions.Select("fun_name = '" + sFunctionName + "'"); 
      if ((bool)rows[0]["fun_enable"]) 
       return true; 
      else 
       return false; 
     } 

     return string.Empty; 
    } 

以下是XAML:

    <Button.IsEnabled> 
         <MultiBinding Converter="{StaticResource IsFunctionEnabledConverter}"> 
          <Binding ElementName="{StaticResource PermissionsTable}" /> 
          <Binding ElementName="btnSave" Path="Name" /> 
         </MultiBinding> 
        </Button.IsEnabled> 

回答

2

可以編寫的IValueConverter使方法調用,並通過自身使用{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource MyConverter}}控制。在Convert方法中,您可以將值轉換爲Control並訪問Control的Name屬性以傳遞給安全方法。通過檢查targetType,您可以確定是否輸出布爾值(用於IsEnabled)或可見性枚舉。

*** UPDATE

我假設你的轉換器結合使用的「PermissionTable」資源實際上是數據表,但你想使用它作爲一個字符串的名字作爲綁定源識別元素。嘗試使用Source="{StaticResource PermissionsTable}"來代替傳遞DataTable資源本身。

+0

我試過使用轉換器,我遇到的問題是轉換器需要我傳遞安全對象來訪問權限。 我創建了一個多值轉換器,它使用控件的名稱和表的權限。當我嘗試使用轉換器時收到此錯誤:「無法投射'System.Data'類型的對象。DataTable'鍵入'System.String'。「 – jes9582 2010-12-01 15:28:38

0

可能有取決於您構建應用程序的方式,可以採用不同的方式處理此問題。如果您正在使用用戶控件視圖並依賴於代碼,則最簡單的路線可能是直接從後面的代碼調用安全對象的方法,並直接在所討論的控件上設置屬性。

如果您使用的是MVVM或者您不是代碼隱藏迷,那麼解決此問題的另一種方法可能是使用按鈕的名稱並使用attached property。附加屬性是一種使用WPF依賴屬性框架來存儲關於對象或控件最初沒有聲明的對象或控件的數據的方法。

隨附的屬性出現了一個叫做附加行爲的概念。基本上,當你創建一個附加屬性時,你會得到一個回調鉤子,只要該屬性設置在一個對象上就會被調用。當調用此回調函數時,您會收到屬性設置的對象以及屬性的新值和舊值。

您可以使用回調作爲契機,根據您的安全對象檢查屬性的值,並根據需要設置啓用和可見屬性。

- HTH 塵埃

相關問題