【发布时间】:2012-11-10 05:57:27
【问题描述】:
我正在尝试研究如何在行为中捕获数据绑定(拦截或后处理)以自定义目标控件中数据的显示。
我了解IValueConvertor 并了解我可以将一个简单值转换为另一个简单值,但我认为这不足以满足我的需求......它们是:
本例中的控件是TextBlock,我的ObservableCollection 中的对象的数据值是可变长度字符串。我想通过将字符串拆分成多个片段并以编程方式为TextBlock 中的每个片段创建一个<Run Foreground="xxx" Text="yyy"/> 来呈现多种颜色的字符串。
由于字符串是可变长度的,并且颜色必须通过字符串的内容以编程方式确定,我不相信我可以在 XAML 中预先创建 <Run>s,所以我必须以某种方式进入在数据绑定操作上并在绑定时(或不久之后)生成<Run>s。
Binding.NotifyOnTargetUpdated 似乎是一种设置事件处理程序来完成工作的方法,但这在 Windows Phone 缩减版 Silverlight 实现中不可用。
有什么想法吗?所有搜索结果似乎都指向上述内容,但我正在寻找更多。
【问题讨论】:
-
你绑定的类可能实现了
INotifyPropertyChanged。如果是这样,您可以订阅PropertyChanged事件,并在引发事件时创建您的控件 -
是的,确实如此,我会尝试的 - 谢谢。但有一件事是事件处理程序没有得到与对象绑定到的控件相对应的参数。这是一个绑定到 ListBox 的 ObservableCollection,因此它可以是任何项目。我是否只需要搜索才能找到正确的对象,还是有一些数据绑定技巧可以找到特定源对象的目标(处理程序将知道)?
-
那行不通。
PropertyChanged没有为我的列表的初始设置触发。我尝试挂钩ListBox.ItemContainerGenerator.ItemsChanged并且 确实 触发但尚未生成控件,即为时过早。根据this post 应该有一个ListBox.ItemContainerGenerator.StatusChanged事件,但这似乎在Windows Phone 上不存在......所以我仍然被卡住了。如何知道 ListBoxItems 何时呈现?
标签: windows-phone-7 data-binding