在Xaml中我可以使用设置自定义附加属性 当地:TestClass.TestProperty = “1”
我可以使用绑定到自定义附加属性 {Binding Path =(命名空间:[OwnerType]。[PropertyName])} {Binding Path =(local:TestClass.TestProperty)}
但是当我需要在SortDescription中使用自定义附加属性时,如何指定命名空间? 我可以使用绑定到附加属性 new SortDescription(“(Grid.Row)”,ListSortDirection.Descending) 但在这里我无法在任何地方设置命名空间......
最诚挚的问候, 的Jesper
答案 0 :(得分:2)
由于{Binding Path=a:b.c}
的工作原理与{Binding a:b.c}
无关,因此你不能这样做:PropertyPath构造函数没有命名空间上下文。
不幸的是,在SortDescription的情况下,你无能为力。您必须找到一种不使用附加属性进行排序的方法。
通常情况下,我告诉人们使用Tag是编码错误的指标,但在这种情况下,Tag可能是您的最佳选择:您可以在Tag中创建一个具有返回所需实际附加属性的属性的对象。 p>
在PropertyChangedCallback中,将Tag实例化为内部类的实例:
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中使用Tag的子属性:
<SortDescription PropertyName="Tag.TestProperty" />
如果只有一个属性需要排序,您只需使用标记即可。
这个问题的主要问题是使用Tag属性会与尝试使用Tag的任何其他代码冲突。因此,您可能希望在标准库中查找一些模糊的DependencyProperty,它甚至不适用于有问题的对象,而是使用它而不是Tag。