我有一个ItemsControl
子类,其行为类似于Selector
,但它不能成为Selector
的子类,因为所选项目不是Items
。必须在Selector
集合中。所以我不得不重新实现很多SelectedValuePath
的东西。
我的班级有SelectedItem
属性。如果该属性具有值,我创建一个绑定,以便在"SelectedItem." + SelectedValuePath
更改时,SelectedValue
的值被分配给SelectedValue
。这非常有效 - 只要消费者将SelectedItem
绑定到与int ID
上的value属性相同类型的属性。
问题在于:
但是,如果所选项目的SelectedValue
属性被用作值属性,并且Nullable<int> SelectedID
绑定到视图模型上的SelectedItem
属性,绑定无法在视图模型上设置属性,除非ComboBox
为空。
我注意到WPF CoerceValueCallback
类没有这个问题,因此它必须是可解决的,而不需要消费者提供值转换器。我试过了ComboBox.SelectedValue
并且没有为我做任何事情。它不知道目标类型。它没有关于接收该值的绑定的信息。
IValueConverter
做什么我不是吗?
我非常熟悉ComboBox.SelectedValue
以及如何在使用控件的位置将值转换器添加到XAML中的绑定中。我不需要帮助。我询问是否有人知道int
对int?
转换为range
的约束情况如何,而控件的使用者不会在绑定中添加值转换器。
答案 0 :(得分:0)
正如我所料,问题并非我所期望的。没有类型转换问题。
看来问题是我班上的内部问题。我正在使用绑定更新SelectedValue
。
Binding binding = new Binding("SelectedItem." + SelectedValuePath);
binding.Mode = BindingMode.OneWay;
binding.Source = this;
BindingOperations.SetBinding(this, MenuComboBox.SelectedValueProperty, binding);
这似乎干扰了消费者对SelectedValue
的双向约束。
我有BindingTarget
类派生自DependencyObject
。它会公开一个名为DependencyProperty
的{{1}},并在Value
更改时触发一个事件。我已将其编写为将值转发给“只读”Value
DependencyProperty
,其中setter受到保护。因此,我没有使用SelectionBoxItem
作为目标"SelectedItem."+SelectedValuePath
创建绑定,而是使用私有SelectedValue
实例作为目标,并在其{{1}中设置BindingTarget
处理程序。消费者的绑定现在按预期工作。
SelectedValue