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