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

时间:2012-02-06 08:43:04

标签: c# silverlight datagrid virtualization

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

然后我将datagrid的itemssource绑定到observablecolletion。 我还使用DataGridTemplateColumn将我的自定义控件添加为datagrid中的一列。

除了datagrid的虚拟化之外,一切正常。 如果我将一个项添加到dataGrid,编辑我的自定义Control中的值,删除该行,然后添加一个全新的行(一个完整的新实例),我的自定义控件中的值是已删除行的值。 要清理,这不是一个有约束力的错误或类似的东西。 问题是我的自定义文本框的构造函数没有被调用,并且在我更改自定义控件中的实际值之前,绑定也不会更新。 datagrid的虚拟化正在重复使用以前创建的控件。

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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

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