已经耗尽了Windows Phone上的所有精简Silverlight选项,以便通过数据模型以编程方式挂接ListBoxItems的呈现,最后,我为TextBlock
的XAML添加了一个Loaded="..."
事件处理程序。
它不觉得最好的解决方案,但也许这只是我的代码首选项谈话,它实际上是在Windows Phone上执行它的正确方法。
在任何情况下,因为我钩住TextBlock
直接,我不知道如何再拿到就包含TextBlock
的ListBoxItem
数据绑定对象......如果任何人有关于如何重新站起来的建议该树生成ListBoxItem然后我可以直接使用绑定的对象,而不是从别处检索它。
请注意,由于生成了ListBoxItem
,因此我没有找到在哪里放置一个Loaded="..."
事件处理程序在XAML中。 ListBox.ItemTemplate
不接受Loaded
属性。
更新:这不起作用!
当第一次创建并加载TextBlock
时,加载的事件处理程序触发,因此替换最初会起作用。
但
生成ListBoxItem
似乎被回收(我猜由ListBox.ItemContainerGenerator
不希望通过实例化一个全新的容器,使用过多的内存时,也有很多关闭屏幕条目该列表不需要被看到一段时间),当发生这种情况时,Loaded事件不会发生火灾。
由于我在第一次加载TextBlock
时修改了内容,因此这会破坏绑定关联,因此当ListBoxItem
被回收时,它现在包含旧的/不正确的数据。
仍然没有解决方案。
我正在考虑尝试使用IValueConvertor,并以某种方式传递绑定目标的引用......现在确定如何但。
更新2:终于得到它的工作...
与Loaded="..."
事件处理坚持,可以通过在幕后所用的ListBox
configuring the VirtualizingStackPanel禁用先前生成的ListBoxItem
S的回收利用。
在XAML中为ListBox
设置VirtualizingStackPanel.VirtualizationMode="Standard"
以强制每次生成一个新的ListBoxItem,而不是回收先前生成的ListBoxItem。
这意味着每次都会调用Loaded
事件处理程序,我可以用<Run>
替换TextBlock
的普通文本以生成动态彩色文本。
您绑定的类可能实现了'INotifyPropertyChanged'。如果是这样,您可以订阅“PropertyChanged”事件,并在事件发生时创建控件 –
是的,它的确如此,我会尽力而为 - 谢谢。但有一点是事件处理程序没有得到与该对象绑定到的控件相对应的arg。这是绑定到ListBox的ObservableCollection,因此它可以是任何项目。我是否必须搜索才能找到正确的或者是否有一些数据绑定技巧来找到特定源对象(处理程序_will_知道)的目标? – larryk78
这没有奏效。 'PropertyChanged'没有为我的列表初始设置触发。我尝试连接'ListBox.ItemContainerGenerator.ItemsChanged'和_does_ fire,但是控件尚未生成,即为时过早。根据[这篇文章](http://stackoverflow.com/questions/3674451/how-to-get-the-listboxitem-for-an-item-in-listbox-on-bind-time)应该有一个' ListBox.ItemContainerGenerator.StatusChanged'事件,但在Windows Phone上似乎不存在...所以我仍然卡住。我如何知道ListBoxItems何时被渲染? – larryk78