Вы не можете, по той же причине, что {Binding Path=a:b.c}
работает, но {Binding a:b.c}
нет: конструктор PropertyPath не имеет контекста пространства имен.
К сожалению, в случае с SortDescription не так многоВы можете с этим поделать.Вы должны найти способ сортировки без использования прикрепленных свойств.
Обычно я говорю людям, что использование тегов является индикатором плохого кодирования, но в этом случае тег может быть вашим лучшим вариантом: вы можете создать объектвнутри тега, свойства которого возвращают нужные фактические вложенные свойства.
В вашем 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); } }
}
}
Теперь вы можете использовать вложенный элемент.свойство Tag в вашем SortDescription:
<SortDescription PropertyName="Tag.TestProperty" />
Если для сортировки имеется только одно свойство, вы можете просто использовать для него Tag.
Основная проблема в этом заключается в том, чтосвойство Tag будет конфликтовать с любым другим кодом, который также пытается использовать тег.Так что вы можете захотеть найти какой-то неясный объект DependencyProperty в стандартных библиотеках, который даже не применяется к рассматриваемым объектам, и использовать его вместо Tag.