带有自定义控件的Silverlight数据网格虚拟化

本文关键字:数据网 网格 虚拟化 数据 Silverlight 自定义控件 | 更新日期: 2023-09-27 18:22:31

我的silverlight 4应用程序中有一个数据网格。我还制作了一个自定义文本框,它只接受数值,并做一些其他特定的事情。我还在绑定到的自定义控件上添加了一个十进制依赖属性,该属性几乎返回控件从TextBox继承的格式化版本的Text。

然后,我将数据网格的项源绑定到一个可观察集合。我还使用DataGridTemplateColumn将自定义控件添加为数据网格中的列之一。

除了数据网格的虚拟化之外,一切都很好。如果我将一个项目添加到dataGrid,编辑我的自定义控件中的值,删除该行,然后添加一个全新的行(一个全新实例),那么我的自定义控制中的值就是已删除行的值。需要澄清的是,这不是一个具有约束力的错误或类似的错误。问题是,我的自定义文本框的构造函数没有被调用,绑定也没有更新,直到我更改自定义控件中的实际值。数据网格的虚拟化正在重新使用以前创建的控件。

我不想关闭虚拟化。有没有办法指定我的自定义控件应该如何回收(虚拟化)?或者可能是控件被虚拟化或回收时引发的事件?

任何帮助都将不胜感激。

带有自定义控件的Silverlight数据网格虚拟化

您有机会升级到Silverlight 5吗?在SL 5中,您有DataContextChanged事件,我认为这应该是检测控件何时被重用以绘制另一行的好方法。

如果SL 5不是一个选项,您可以在Loaded事件中捕获它。我不完全确定,但我认为Loaded应该在控件被重用时被激发。然后,每当Loaded被激发时,将当前DataContext保存到一个临时变量中。当Loaded下次被激发时,您可以将旧的DataContext与当前的DataContext进行比较,如果它已经更改,则根据需要重新运行您的逻辑。