[英]Bind DoubleUpDown Value after Minimum and Maximum
我有一个带ListBox
和DoubleUpDown
的UserControl
。 当我在ListBox
框中选择项目时,我想设置Minimum
, Maximum
和DoubleUpDown
的Value
,以便用户可以更改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>
问题在于此代码首先设置了Value
,然后设置了Minimum
和Maximum
所以如果我具有以下值:
Name | MyValue | MaxDif
-----------------------
One | 6 | 2
Two | 1 | 1
该范围之一是4..8和两个范围为0..2。 如果我先选择一个 ,然后选择两个 ,则它看起来像Two.MyVal = 4
,因为当从One出发的范围仍处于活动状态时,将插入该值。
如何更改代码以首先设置“ Minimum
和“ Maximum
,然后再设置“ Value
?
官方设计建议书指出
允许以任何顺序设置属性,即使这会导致对象的临时无效状态
从根本上讲,这意味着在设计自己的控件时,请确保省略完整性检查,直到初始化完成(直到IsInitialized
为true
且IsInitialized
Initialized
事件为止)。
显然DoubleUpDown
在设计时并未考虑您的确切问题,而是在初始化完成之前强制执行Min / Max边界。
编辑: 此特定控件的公共源代码似乎考虑了IsInitialized
因此实际上不应出现您遇到的问题。
尽管我找不到任何文档都未明确说明,但Xaml Parser会按遇到对象的顺序设置对象属性。
可能的解决方案:
您应该能够通过最后设置Value
属性来解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.