【发布时间】:2015-09-10 19:34:20
【问题描述】:
我有一个ItemsControl 子类,其行为类似于Selector,但它不能是Selector 的子类,因为所选项目不一定在Items 集合中。所以我被困在重新实现很多Selector 的东西。
我的班级有一个SelectedValuePath 属性。如果该属性有值,我将创建一个绑定,以便当SelectedItem 更改时,"SelectedItem." + SelectedValuePath 的值将分配给SelectedValue。这非常有效——只要消费者将我的SelectedValue 绑定到与SelectedItem 上的值属性相同类型的属性。
问题出在这里:
但是,如果所选项目具有用作值属性的 int ID 属性,并且 SelectedValue 绑定到视图模型上的 Nullable<int> SelectedID 属性,则绑定无法在视图上设置该属性模型,除非SelectedItem 为空。
我注意到 WPF ComboBox 类没有这个问题,所以它必须是可解决的,而不需要消费者提供值转换器。我试过CoerceValueCallback,但这对我没有任何作用。它不知道目标类型。它没有关于接收值的绑定的信息。
ComboBox.SelectedValue 在做什么而我却没有?
我相当熟悉IValueConverter 以及在使用控件时如何将值转换器添加到 XAML 中的绑定中。我不需要这方面的帮助。我在问是否有人知道ComboBox.SelectedValue 上的任何绑定如何将int 转换为int?,而无需控件的使用者向绑定添加值转换器。
【问题讨论】: