簡體   English   中英

WPF綁定如何區分索引器屬性和列表元素?

[英]How can a WPF binding distinguish between an indexer property and a list element?

我有以下形式的綁定:

Path=SpecialCollection[0]

SpecialCollection類擴展了ObservableCollection,並且具有indexer屬性。

public T this[string propertyValue]
{
    get
    {
        // do stuff
        return default(T);
    }
}

我的問題是綁定試圖獲取索引器屬性值,而不是返回集合中的第0個項目。 有沒有一種方法可以強制綁定將0視為整數,以便它返回一個collection元素,而不是調用collection的indexer屬性的getter?

根據MSDN,您可以告訴綁定輸入為索引的值的類型:

在索引器內部,可以有多個索引器參數,以逗號(,)分隔。 每個參數的類型都可以用括號指定。 例如,您可以具有Path =“ [(sys:Int32)42,(sys:Int32)24]”,其中sys映射到系統名稱空間。

我注意到, Binding構造采取的路徑字符串使用另一個PropertyPath構造比默認PropertyPath類型轉換器,說PropertyPath構造並不在這種情況下工作。 為避免此問題,可通過手動設置Path屬性來避免Binding構造函數,該屬性通過類型轉換器調用轉換。

<!-- Does not work -->
<TextBlock Text="{Binding [(sys:Int32)0]}"/>
<!-- Does work -->
<TextBlock Text="{Binding Path=[(sys:Int32)0]}"/>

實際上,您有兩個索引器屬性,一個帶有int參數,另一個帶有string參數。 坦白地說,我不知道綁定表達式在模棱兩可時如何選擇要使用的索引器。 如果只有一個,則可以將索引強制為indexer參數的類型。 如果有兩個,則可以引發異常,也可以根據啟發式方法選擇一個。 在這種情況下,它顯然選擇了錯誤的選項。

要解決此問題,您可以將字符串索引器“下移”,使其掛在新屬性上,這樣它就不會與列表索引器競爭;或者,如果您需要的只是List[0] ,則可以添加一個First屬性並繞過任一索引器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM