Windows Phone 7.1数据绑定混乱

时间:2012-11-10 05:57:27

标签: windows-phone-7 data-binding

我正在尝试研究如何捕获行为中的数据绑定(截取或后处理)以自定义目标控件中的数据显示。

我知道IValueConvertor并了解我可以将一个简单的值转换为另一个简单的值,但我不相信这对我的需求是足够的......这是:

这种情况下的控件是TextBlock,我ObservableCollection中对象的数据值是可变长度字符串。我希望通过将字符串拆分成多个部分来呈现多种颜色的字符串,并以编程方式为<Run Foreground="xxx" Text="yyy"/>内的每个部分创建TextBlock

由于字符串是可变长度的,并且颜色必须以字符串的内容以编程方式确定,我不相信我可以在XAML中预先创建<Run>,所以我必须以某种方式加入数据绑定操作并在绑定时(或很快之后)生成<Run>

Binding.NotifyOnTargetUpdated似乎是一种设置事件处理程序来完成工作的方法,但这在Windows Phone简化的Silverlight实现中是不可用的。

有什么想法吗?所有搜索结果似乎都指向上述内容,但我正在寻找更多内容。

1 个答案:

答案 0 :(得分:0)

显然已经耗尽了所有关于Windows Phone选项的Silverlight选项以通过数据模型以编程方式挂钩ListBoxItems的呈现,我最终为Loaded="..."的XAML添加了TextBlock事件处理程序

它不是最好的解决方案,但也许只是我的代码首选项说话,它实际上是在Windows Phone上执行它的正确方法。

在任何情况下,因为我直接挂钩TextBlock,我不知道如何到达包含ListBoxItem的{​​{1}}上的数据绑定对象。如果有人有关于如何将树备份到生成的ListBoxItem的建议,那么我可以直接使用绑定对象,而不是从其他地方检索它。

请注意,由于生成了TextBlock,因此我没有找到在XAML中为其放置ListBoxItem事件处理程序的位置。 Loaded="..."不接受ListBox.ItemTemplate属性。

更新:这不起作用!

首次创建和加载Loaded时会触发Loaded事件处理程序,因此替换最初会起作用。

BUT

生成的TextBlock似乎是被回收的(我猜是ListBoxItem,当有许多 off-时,通过实例化一个全新的容器不想使用过多的内存。列表中的屏幕条目暂时不需要看到),当发生这种情况时,Loaded事件不会发生火灾。

由于我在首次加载ListBox.ItemContainerGenerator时修改了内容,这会破坏绑定关联,因此当TextBlock被回收时,它现在包含旧的/不正确的数据。

仍然没有解决方案。

我正在考虑尝试使用IValueConvertor并以某种方式传递对绑定目标的引用...现在确定如何。

更新2:终于让它发挥作用......

使用ListBoxItem事件处理程序,可以禁用Loaded="..."ListBoxItem下使用的configuring the VirtualizingStackPanel对以前生成的ListBox的回收。

ListBox集合VirtualizingStackPanel.VirtualizationMode="Standard"的XAML中,强制每次生成一个新的ListBoxItem,而不是回收以前生成的ListBoxItem。

这意味着每次调用Loaded事件处理程序,我可以用TextBlock替换<Run>的普通文本,以生成动态着色文本。