背景:我们开发了一个在线聊天程序,在做聊天历史纪录的呈现的时候我们用到了FlowDocument。
关于数据:MessageModel 聊天消息实体
MessageModelList 聊天消息实体集合
现阶段解决方案:我们为MessageModelList定义了一个监听事件,如果MessageModelList发生变化(Add,Remove),就执行这个事件---为MessageModelList中新增的MessageModel new一个Paragraph来接收这个MessageModel,然后把这个Paragraph加到Document中。但是这种办法不能实现View与ViewModel之间的解耦。
我想到的解决方法:用ListBox,把MessageModelList binding到ItemSource中,但我们历史消息框只是为了呈现消息而已,不需要ListBox那么多功能,感觉用ListBox有点大材小用了。而且ListBox的机制应该是(我目前理解)当
MessageModelList发生变化时ListBox会重新生成一次ListBoxItem,这样是否会耗费资源?
我的问题:
1. 使用ListBox是否合适?能不能把我不需要的ListBox的功能屏蔽掉,能不能把我新增的MessageModelList中的MessageModel生成一个新的ListBoxItem直接加到Document中,而不是重新生成一次ListBoxItem?(如果我对ListBox没有理解错误的话。)
2. 如果我继续使用FlowDocument是否能实现直接一个Source来banding MessageModelList,而不需要我在ViewModel里面去New Paragraph?
3. 有没有更好的解决方案或其他控件符合我所需要的特性。