在Property Change处理程序中验证附加属性

时间:2014-11-12 02:00:56

标签: c# .net windows-phone-8

我正在为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)能够将整个子控件集合作为其所有实例中通用的静态方法进行验证。

我想的一个选项是在添加子控件时附加另一个附加属性(内部),然后使用该属性在回调中获取父级,并激活验证逻辑。这听起来像是一个过于复杂的逻辑。

您能否建议处理这类情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

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

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

由于您只能为属性分配单个值,因此这将确保只设置一个值。