2010-06-16 48 views
3

在XAML我可以設置使用自定義的附加屬性 本地:TestClass.TestProperty =「1」SortDescription自定義附加屬性

一個I可以結合使用 {結合路徑=(命名空間的自定義附加屬性: [OwnerType]。[PropertyName])} {Binding Path =(local:TestClass.TestProperty)}

但是,我需要在SortDescription中使用自定義附屬屬性時如何指定名稱空間? 我可以綁定到使用 新SortDescription(「(Grid.Row)」,ListSortDirection.Descending) 附加屬性,但在這裏我不能設置一個命名空間的任何地方......

最好的問候, 加斯帕

回答

2

出於與{Binding Path=a:b.c}工作原理相同的原因,但{Binding a:b.c}不能:PropertyPath構造函數沒有名稱空間上下文。

不幸的是,在SortDescription的情況下,你可以做的事情不多。您必須找到一種不使用附加屬性的方式進行排序。

通常我會告訴人們Tag的使用是錯誤編碼的指示器,但在這種情況下,Tag可能是您的最佳選擇:您可以在Tag中創建具有返回所需實際附加屬性的屬性的對象。

在你PropertyChangedCallback,實例變量,以一個內部類的一個實例:

public class TestClass : DependencyObject 
{ 
    ... TestProperty declaration ... 
    PropertyChangedCallback = (obj, e) => 
    { 
    ... 
    if(obj.Tag==null) obj.Tag = new PropertyProxy { Container = obj }; 
    }); 

    public class PropertyProxy 
    { 
    DependencyObject Container; 
    public SomeType TestProperty { get { return GetTestProperty(Container); } } 
    } 
} 

現在你可以使用標籤的子屬性在SortDescription:

<SortDescription PropertyName="Tag.TestProperty" /> 

如果只有一個單獨的屬性進行排序,你可以簡單地使用它的標籤。

與此相關的主要問題是使用Tag屬性將與任何其他代碼也會嘗試使用標記相沖突。因此,您可能需要在標準庫中尋找一些不明顯的DependencyProperty,它們甚至不適用於有問題的對象,而是使用它代替Tag。

+0

當我在TabControl中對TabItems進行排序時,我決定使用KeyboardNavigation.TabIndex附屬屬性,這似乎符合這個概念,並且希望不會給我任何問題。 – Krimson 2010-06-17 08:18:37