当数据更改时,如何阻止列表框中的扩展器折叠?
我有一个带有项目列表框的屏幕。 项目模板包含一个扩展器控件,其中一些数据位于标头中,一些数据位于扩展器的内容部分中。
ListBox ItemTemplate 的数据模板与此类似:
<DataTemplate x:Key="MyTypeTemplate" DataType="{x:Type MyType}">
<Expander DataContext="{Binding}">
<Expander.Header>
<Canvas>
<TextBox Text="{Binding MyProperty}"/>
</Canvas>
</Expander.Header>
<Canvas>
<TextBox Text={Binding MyDetailedProperty}"/>
</Canvas>
</Expander>
</DataTemplate>
每当这些属性发生更改(“MyProperty”或“MyDetailedProperty”)发生更改时,扩展器控件就会折叠。 我相信这与数据更改时重新创建 Expander 项目有关。
作为附加数据项,绑定到列表框的列表实现 IBindingList,因为它来自为 .NET 2.0 创建的库。 由于时间限制,我无法使用 ObservableCollection 重新创建列表
I have a screen with a ListBox of items. The item template contains an expander control with some of the data in the header and some of the data in the content part of the expander.
The data template for the ListBox ItemTemplate is similar to this:
<DataTemplate x:Key="MyTypeTemplate" DataType="{x:Type MyType}">
<Expander DataContext="{Binding}">
<Expander.Header>
<Canvas>
<TextBox Text="{Binding MyProperty}"/>
</Canvas>
</Expander.Header>
<Canvas>
<TextBox Text={Binding MyDetailedProperty}"/>
</Canvas>
</Expander>
</DataTemplate>
Whenever these properties change, either 'MyProperty' or 'MyDetailedProperty' changes, the expander control collapsed. I believe that is has something to do with the Expander item getting recreated when the data changes.
As an additional data item, the list being bound to the listbox implements IBindingList as it comes from a library created for .NET 2.0. I cannot recreate the list using ObservableCollection due to time constraints
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我最终将模型对象包装在一个视图对象中,该对象添加了一个 IsExpandable 属性,我可以将其绑定到 Expanded IsExpanded 属性,然后公开数据。
这不是通用解决方案,但它解决了我眼前的问题。 我发现我尚未探讨的可能问题是 PropertyChanged 和 ListChanged 事件附加是否会导致我的 UI 对象出现内存泄漏问题,但在我的情况下,每个对象只应创建一次。
此外,不支持集合更改中添加和删除之外的事件,但就我而言,我不会触发任何其他事件,因此我可以安全地忽略它们。
I ended up wrapping my model objects in a view object that adds an IsExpandable property that I could bind to the Expanded IsExpanded property and then exposed the data.
This is not a general purpose solution but it solves my immediate problem. The possible issues that I see that I haven't explored are whether the PropertyChanged and ListChanged event attaches cause memory leak issues with my UI objects, but in my situation each object should only be created once.
Also, events beyond Add and Remove in the collection change are not supported, but in my case I'm not firing anything else so it is safe for me to ignore them.