我有UserControl
ListBox
和DoubleUpDown
。当我在ListBox
中选择项目时,我想设置Minimum
,Maximum
和Value
的{{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>
,然后设置Value
和Minimum
,如果我有这个值:
Maximum
One 的范围是4..8, Two 的范围是0..2。如果我首先选择 One 然后 Two ,它看起来像Name | MyValue | MaxDif
-----------------------
One | 6 | 2
Two | 1 | 1
,因为当 One 的范围是仍然活跃。
如何更改代码以首先设置Two.MyVal = 4
和Minimum
,之后设置Maximum
?
答案 0 :(得分:1)
Official Design Recommendations州
允许以任何顺序设置属性,即使这会导致对象的临时无效状态
这基本上意味着在设计自己的控件时,请确保在初始化完成之前省略完整性检查(直到IsInitialized
为true
并且Initialized
事件被触发)。
显然,DoubleUpDown
的设计并未考虑您的确切问题,并在初始化完成之前强制执行最小/最大边界。
修改:this particular control的公开源代码似乎考虑了IsInitialized
,因此您遇到的问题实际上不应该发生。
虽然我在能够找到的任何文档中都没有明确说明,但Xaml Parser按照遇到的顺序设置对象属性。
可能的解决方案:
您应该可以通过最后设置Value
属性来解决此问题。