【问题标题】:Dynamic databinding ListBox + WPF + FlowDocument动态数据绑定 ListBox + WPF + FlowDocument
【发布时间】:2016-08-25 10:53:52
【问题描述】:

我有一个列表框,我正在尝试使用 ItemsSource 将其绑定到 IList 集合。当我的每个人对象都有一个我试图在 listBoxItem 内的richTextBox 中显示的 FlowDocument 时,我的问题场景就出现了。

想象一下性能下降,当有 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}
}

【问题讨论】:

  • 请发布您迄今为止尝试过的代码,以便其他人可以提供帮助
  • @UmairFarooq 这是我可以在这里键入的最接近的值,150 个流文档绑定到列表框,最终会在滚动时导致性能下降。

标签: wpf listview data-binding


【解决方案1】:

您可以将 UI 分成两个控件以提高性能。考虑在 person 类中添加一个唯一属性,例如数据库表中的主键。

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;
          } 
}

【讨论】:

  • 我确实喜欢放置 selectionChangedEvent 的想法,但是,如果我最终使用鼠标滚动,在那边,我不会遇到 selectionChangedEvent。
  • 你不想表现不佳,然后让事情驱动机器人行为驱动。就像滚动一样。因为这种事件(如果存在)变化很快,如果你在这种事件中执行繁重的任务,它会带来很差的性能。
  • 但是有没有办法动态绑定和滚动,我想知道,但我用选择事件检查了性能,谢谢。
  • 我不介意加载文档延迟一秒钟,但滚动延迟是我不想要的!
  • 检查此解决方案。我不认为这个解决方案会有延迟。
猜你喜欢
  • 2011-04-09
  • 1970-01-01
  • 2014-06-11
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 2012-06-20
相关资源
最近更新 更多