gpt4 book ai didi

wpf - 具有自定义附加属性的 SortDescription

转载 作者:行者123 更新时间:2023-12-02 10:58:29 24 4
gpt4 key购买 nike

在 Xaml 中,我可以使用设置自定义附加属性本地:TestClass.TestProperty =“1”

我可以使用绑定(bind)到自定义附加属性{绑定(bind)路径=(命名空间:[OwnerType].[PropertyName])}{绑定(bind)路径=(local:TestClass.TestProperty)}

但是,当我需要在 SortDescription 中使用自定义附加属性时,如何指定命名空间?我可以使用绑定(bind)到附加属性new SortDescription("(Grid.Row)", ListSortDirection.Descending)但在这里我无法在任何地方设置命名空间...

最诚挚的问候,杰斯珀

最佳答案

不能,原因与 {Binding Path=a:b.c} 有效但 {Binding a:b.c} 无效的原因相同:PropertyPath 构造函数没有命名空间上下文。

不幸的是,对于 SortDescription 来说,您无能为力。您必须找到一种不使用附加属性的排序方法。

通常我告诉人们,使用 Tag 是错误编码的一个指标,但在这种情况下,Tag 可能是您的最佳选择:您可以在 Tag 中创建一个对象,该对象的属性可返回您想要的实际附加属性。

在 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 属性会与也尝试使用该 Tag 的任何其他代码发生冲突。因此,您可能想在标准库中查找一些晦涩的 DependencyProperty,这些属性甚至不适用于相关对象,并使用它来代替 Tag。

关于wpf - 具有自定义附加属性的 SortDescription,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3053559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com