我有一个listBox,我试图使用ItemsSource绑定到IList集合。我的问题场景出现在每个person对象都有一个FlowDocument时,我试图在listBoxItem中的richTextBox中显示。
想象一下,当有1000个人对象时,性能会下降,
有没有办法,我可以动态加载flowDocument / RichTextbox,这样就不会对性能造成影响。
有没有办法,我知道列表框的哪些项目随时可见,这样我就可以动态地将richtextbox与流文档绑定,当滚动发生时,我可以清除以前的绑定和仅将绑定应用于那些可见的项目。
<ListBox ItemsSource="{Binding PersonsCollection">
<ListBox.ItemTemplate>
<DataTemplate>
<RichTextBox Document="{Binding PersonHistory}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
感谢
public class Person
{
public FlowDocument PersonHistory{get;set}
}
答案 0 :(得分:1)
您可以在两个控件中分隔UI以提高性能。考虑在人员类中添加一个唯一属性,如数据库表中的主键。
public class Person
{
public long ID{get;set;}
public FlowDocument PersonHistory{get;set}
}
现在你可以拥有一个ListBox
<ListBox Name="PersonsListBox" ItemsSource="{Binding PersonsCollection"} DisplayMemberPath="ID" SelectionChanged="personsList_SelectionChanged">
</ListBox>
使用它绑定PersonsCollection
并设置DisplayMemberPath="ID"
以仅显示ListBox中的ID。
你的xaml中分别有一个RichTextBox。
<RichTextBox Name="personHistoryTextBox"/>
如果您看到我也添加了ListBox事件。 SelectionChanged
事件。
在你的活动中你可以做这样的事情。
private void personsList_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
if(PersonsListBox.SelectedItem != null){
personHistoryTextBox.Document = (PersonsListBox.SelectedItem as Person).PersonHistory;
}
}