2009-10-30 61 views
1

例如,我有綁定到一個屬性的簡單文本框:如何訪問Silverlight中數據綁定屬性的屬性屬性?

<TextBox Text="{Binding FirstName, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}" /> 

屬性看起來是這樣的:

[Display(Name="Last Name")] 
public string LastName { ... } 

因此,考慮到文本框,我想獲得的顯示名稱屬性的屬性。這將用於包含現場標籤和其他一些細節的複合控制。

在此先感謝。

回答

0

我目前無法嘗試此操作,因此這可能不準確甚至不可能。只要我到一臺電腦,我可以嘗試這一點,我會......直到那時,這只是理論。

我猜你的複合控件你有這樣的事情每個數據綁定字段:

<TextBlock Text="{Binding FirstName, Mode=OneWay}" /> 
<TextBox Text="{Binding FirstName, Mode=TwoWay, ...}" /> 

什麼你可能需要爲了創造一個轉換器,將辦查看Display屬性的綁定數據,然後將該值轉換爲屬性值。這將導致上述塊看起來像這樣:

<TextBlock Text="{Binding FirstName, Mode=OneWay, Converter={StaticResource AttributeConverter}, ConverterParameter=Display}" /> 
<TextBox Text="{Binding FirstName, Mode=TwoWay, ...}" /> 

在這裏,我在Display通過在情況下,你要訪問不同的屬性參數。

再次,這只是理論,因爲我不能給當前測試這一點,如果IValueConverter.Convert(object value, ...)通過在這種情況下,有問題的對象或只是字符串值不能回憶。如果它只是字符串值,它可能是不可能的,但如果它是對象,它將取決於您有多少訪問反射命名空間來評估屬性。

只要我能夠,我會把情景放在一起並嘗試一下。

編輯:

出於某種原因,語法時才熒光筆是給我的手指時,我嘗試粘貼在此編輯代碼

不管怎麼說,在一個小項目試圖了這一點之後,不要以爲你可以做到這一點。根據我做2個數據綁定控件和使用轉換器消耗的屬性的一個建議

,我做了以下內容:

  1. 創建的數據綁定控件的XAML。
  2. 創建用於測試的自定義屬性
  3. 創建具有用於測試的裝飾屬性的模型。
  4. 創建轉換器以嘗試從屬性中讀取屬性。

這裏是我陷入困境的地方。我無法從IValueConverter獲取數據綁定類型。轉換(...)方法。 value參數以與targetType參數相同的字符串形式出現。雖然這是主要的掛斷,但第二個是我無法動態識別控件是綁定到數據的屬性名稱。這可以通過轉換器參數來補救。

現在,我能夠讀取屬性值,如果我提供了裝飾屬性的測試模型的類型,以便儘可能多,但我無法動態地確定類型。

我能想到的唯一方法是在數據真正綁定到您的自定義控件之前創建某種形式的觀察者或轉換器。

好運