[英]Custom Control: How to Call Method When Inherited Dependency Property Changes?
我正在编写一个继承ItemsControl的自定义控件。 每当某些属性更改时,我需要调用一个方法。 对于我自己的依赖项属性,我可以在setter中将其称为没有问题,但是对于诸如ItemsSource之类的继承属性,我不知道如何执行此操作,并且我想学习如何在不覆盖整个内容的情况下进行操作。
在搜索此内容时,我看到提到至少可以使用WPF中的OverrideMetadata来完成此操作(我的项目是UWP)。 我了解了如何使用OverrideMetadata更改默认值,但看不到如何将其用作属性更改通知。
UWP中有一个专门为此设计的名为RegisterPropertyChangedCallback
的新方法。 例如,以下是我如何在扩展的GridView
控件中删除默认入口过渡的方法。
// Remove the default entrance transition if existed.
RegisterPropertyChangedCallback(ItemContainerTransitionsProperty, (s, e) =>
{
var entranceThemeTransition = ItemContainerTransitions.OfType<EntranceThemeTransition>().SingleOrDefault();
if (entranceThemeTransition != null)
{
ItemContainerTransitions.Remove(entranceThemeTransition);
}
})
您可以使用UnregisterPropertyChangedCallback
。
可以在此处找到更多信息。
对于ItemsSource
属性,您可以仅重写OnItemsSourceChanged
方法,但是对于任何其他依赖项属性,可以使用DependencyPropertyDescriptor
:
public class MyItemsControl : ItemsControl
{
public MyItemsControl()
{
DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor
.FromProperty(ItemsControl.ItemsSourceProperty, typeof(ItemsControl));
if (dpd != null)
{
dpd.AddValueChanged(this, OnMyItemsSourceChange);
}
}
private void OnMyItemsSourceChange(object sender, EventArgs e)
{
//...
}
}
WPF就是这样。 在UWP应用中,您应该可以使用@Thomas Levesque的DependencyPropertyWatcher
类: https ://www.thomaslevesque.com/2013/04/21/detecting-dependency-property-changes-in-winrt/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.