2010-06-16 2 views
3

В Xaml я могу установить пользовательский вложенное свойство, используя местный: TestClass.TestProperty = «1»SortDescription с пользовательским вложенным свойством

двутавровый можно привязать к пользовательскому вложенному свойству, используя {Binding Path = (Пространства имен: [OwnerType]. [PropertyName])} {Binding Path = (local: TestClass.TestProperty)}

Но как указать пространство имен, когда мне нужно использовать настраиваемое вложенное свойство в SortDescription? я могу связать с вложенным свойством, используя новый SortDescription ("(Grid.Row)", ListSortDirection.Descending) , но здесь я не могу установить пространство имен в любом месте ...

С наилучшими пожеланиями, Jesper

ответ

2

Вы не можете по той же причине, что и {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 противоречит любому другому коду, который также пытается использовать тег. Таким образом, вы можете захотеть найти какой-то непонятный DependencyProperty в стандартных библиотеках, которые даже не применяются к рассматриваемым объектам, и использовать это вместо Tag.

+0

Как я сортирую TabItems в TabControl, я решил использовать прикрепленное свойство KeyboardNavigation.TabIndex, которое, похоже, вписывается в концепцию, и это, надеюсь, не даст мне никаких проблем. – Krimson

Смежные вопросы