我有一个自定义控件,其中有两个ItemSourceProperty
和ItemTemplateProperty
定义的依赖项属性(这只是一个示例)。
创建控件后,我想一起处理初始属性集:
<MyControl ItemsSource="{Binding Items}" ItemTemplate="{StaticResource SomeTemplate}" />
这是为了避免为每个项目创建两次视图。假定创建控件后,假设首先调用PropertyChangedCallback
中的ItemSourceProperty
。此时ItemTemplate
将为空。如果我此时创建视图,则视图将没有模板。为PropertyChangedCallback
调用ItemTemplate
时,我不得不使用模板重新创建视图。
在框架设置ItemSourceProperty
和ItemTemplateProperty
的初始值之后,如何以调用初始化的方式实现它?
在用户仅设置属性之一的情况下,仍然需要工作
<MyControl ItemsSource="{Binding Items}"
答案 0 :(得分:0)
属性被一个接一个地设置,这意味着您的回调将被一个接一个地调用。您可以做的是检查另一个属性是否已在第一个属性的PropertyChangedCallback
中初始化,反之亦然。如果没有,您可以简单地返回并什么也不做。
或者您可以处理控件的Loaded
事件,并在事件处理程序中检查这两个属性的状态。
但是,您无法阻止在设置另一个属性B之前调用属性PropertyChangedCallback
。您不知道何时以及是否会设置此属性。因此,您需要自己在回调或其他地方实现这种逻辑。