正在验证属性更改处理程序中附加的属性

本文关键字:属性 程序 验证 处理 | 更新日期: 2023-09-27 18:30:01

我正在为Windows Phone 8开发一个自定义控件,该控件派生自ItemsControl,将有许多子对象(另一个自定义类)。它需要有一个附加属性IsMinonAxis,其中一个子项只能设置一次,不能设置多次。因此,下面的代码将是我想要避免的问题。

<WPGraphControl:GraphControl>
     <WPGraphControl:GraphLine GraphDataPoints="{Binding SpeedPoints}"  WPGraphControl:GraphControl.IsMinonAxis="True" />
     <WPGraphControl:GraphLine GraphDataPoints="{Binding AltitudePoints}" WPGraphControl:GraphControl.IsMinonAxis="True" />
</WPGraphControl:GraphControl>

问题是附加的属性附加到子控件,而不是父控件。在PropertyCHangedCallback(作为RegisterAttached的一部分注册为PropertyMetadata的一部分)中,我可以获得正在为其设置属性的子对象,但我不能访问实际的控件实例(this)来验证整个子控件集合,因为它是所有实例通用的静态方法。

我正在考虑的一个选项是附加另一个属性(内部),该属性将在添加子控件时附加,然后使用该属性在回调中访问父控件,并启动验证逻辑。对我来说,这听起来像是一个过于复杂的逻辑

你能建议一下处理这种情况的最佳方法是什么吗?

正在验证属性更改处理程序中附加的属性

在GraphControl上拥有一个非附加属性可能会更容易,该属性将使用一个Element。我已经有一段时间没有做WinPhone XAML了,但在WPF中,这看起来像:

<wpgc:GraphControl MinorAxis="{Binding ElementName=Foo}">
    <wpgc:GraphLine x:Name="Foo" />
    <wpgc:GraphLine x:Name="Bar" />
</wpgc:GraphControl>

由于只能为属性指定一个值,因此这将确保只设置一个值。