WPF 如何使用值转换器绑定两个不同但相关类型的可观察集合?
我有一个自定义控件,其中包含一个可观察集合(DP),其中包含某种类型的对象。我想将其绑定到另一个可观察集合,该集合在我的虚拟机中保存不同类型的对象。我该怎么做?
我应该做这样的事情吗?
编辑。当然,当集合中的元素在任一侧被修改时,绑定应该起作用。
I have a custom control with an observable collection(DP) holding a certain type objects. I want to bind it to another observable collection holding a different type objects in my VM. How do I do this?
Should I even be doing something like this?
Edit. Ofcourse the binding should work when elements in the collections are modified on either side.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Meleak 的评论是正确的,您应该以某种方式将一个集合转换为另一个集合并同步它们。这是我上次的做法:
View(我在下面将其命名为
MyControl
)具有IEnumerable
类型的属性Items
< br>DataContext 具有
IEnumerable
类型的属性Items
然后在 XAML 中:
关于转换每个项目 - 它可以是通用代码,它将动态确定如何转换
Source
到Target
,反之亦然,或者它应该是一个代码,它知道它将转换哪些确切类型以及如何转换它们。Meleak's comment is correct, you should somehow transform one collection into another and sync them. Here is how I did it last time:
View (I've named it
MyControl
below) has propertyItems
of typeIEnumerable<Target>
DataContext has property
Items
of typeIEnumerable<Source>
Then in XAML:
Regarding converting each item - it can be either generic code which will dynamically determine how to convert
Source
toTarget
and vice versa or it should be a code which will know which exact types it will convert and how to convert them.ValueConverters 不按照您描述的方式工作,您必须手动创建一个新集合。
这并不能直接回答你的问题,但是在ReactiveUI(http://www.reactiveui.net)中,这种情况非常简单:
ValueConverters don't work the way you're describing, you have to create a new collection by-hand.
This doesn't answer your question directly, but in ReactiveUI (http://www.reactiveui.net), this scenario is quite easy:
使用实现 IValueConverter 的自定义 Converter 类
Use your custom Converter class implementing IValueConverter