在最小值和最大值之后绑定DoubleUpDown值

时间:2017-10-03 07:57:58

标签: c# wpf xaml data-binding wpf-extended-toolkit

我有UserControl ListBoxDoubleUpDown。当我在ListBox中选择项目时,我想设置MinimumMaximumValue的{​​{1}},以便用户可以更改DoubleUpDown 1}}不是来自预定义的范围,而是在给定值的某个范围内。我使用这段代码:

Value

问题是此代码首先设置<extToolkit:DoubleUpDown Increment="0.1" Value="{Binding SelectedItem.MyValue, ElementName=listBox1, UpdateSourceTrigger=PropertyChanged, Converter={conv:CheckValue}}" FormatString="0.0"> <extToolkit:DoubleUpDown.Maximum> <MultiBinding Converter="{conv:CorMaximum}"> <Binding Path="SelectedItem.MyValue" ElementName="listBox1" /> <Binding Path="SelectedItem.MaxDif" ElementName="listBox1" /> </MultiBinding> </extToolkit:DoubleUpDown.Maximum> <extToolkit:DoubleUpDown.Minimum> <MultiBinding Converter="{conv:CorMinimum}"> <Binding Path="SelectedItem.MyValue" ElementName="listBox1" /> <Binding Path="SelectedItem.MaxDif" ElementName="listBox1" /> </MultiBinding> </extToolkit:DoubleUpDown.Minimum> </extToolkit:DoubleUpDown> ,然后设置ValueMinimum,如果我有这个值:

Maximum

One 的范围是4..8, Two 的范围是0..2。如果我首先选择 One 然后 Two ,它看起来像Name | MyValue | MaxDif ----------------------- One | 6 | 2 Two | 1 | 1 ,因为当 One 的范围是仍然活跃。

如何更改代码以首先设置Two.MyVal = 4Minimum,之后设置Maximum

1 个答案:

答案 0 :(得分:1)

Official Design Recommendations

  

允许以任何顺序设置属性,即使这会导致对象的临时无效状态

这基本上意味着在设计自己的控件时,请确保在初始化完成之前省略完整性检查(直到IsInitializedtrue并且Initialized事件被触发)。

显然,DoubleUpDown的设计并未考虑您的确切问题,并在初始化完成之前强制执行最小/最大边界。

修改:this particular control的公开源代码似乎考虑了IsInitialized,因此您遇到的问题实际上不应该发生。

虽然我在能够找到的任何文档中都没有明确说明,但Xaml Parser按照遇到的顺序设置对象属性。

可能的解决方案:

您应该可以通过最后设置Value属性来解决此问题。