0

我有UserControlaListBox和 a DoubleUpDown。当我选择ListBox我要设置的项目时Minimum,用户可以不从预定义的范围更改,而是在给定值附近的某个范围内更改。我使用这段代码: MaximumValueDoubleUpDownValue

<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,然后设置了MinimumMaximum所以如果我有这个值:

Name | MyValue | MaxDif
-----------------------
 One |    6    |   2
 Two |    1    |   1

的范围是 4..8,的范围是 0..2。如果我先选择One,然后选择Two,它看起来像,因为当One的范围仍处于活动状态 Two.MyVal = 4时,将插入该值。

如何更改代码以首先设置MinimumMaximum然后设置Value

4

1 回答 1

1

官方设计建议状态

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

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

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

编辑:此特定控件的公共源代码似乎已考虑IsInitialized在内,因此您遇到的问题实际上不应该发生。

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


可能的解决方案:

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

于 2017-10-03T08:24:55.387 回答