【问题标题】:Bind DoubleUpDown Value after Minimum and Maximum在最小值和最大值之后绑定 DoubleUpDown 值
【发布时间】:2017-10-03 07:57:57
【问题描述】:

我有一个UserControl,一个ListBox 和一个DoubleUpDown。当我选择ListBox 中的项目时,我想设置DoubleUpDown 的Minimum、Maximum 和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

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

如何更改代码以首先设置Minimum 和Maximum,然后设置Value?

【问题讨论】:

  • 我不能 100% 确定是否真的如此,但根据我的观察,在 XAML 中设置属性的顺序决定了它们的初始化/分配方式。尝试绑定 Value after Max/Min,例如:&lt;extToolkit:DoubleUpDown.Value&gt;&lt;Binding ....
  • 是的,你是对的。我只是希望这真的能 100% 起作用:-)

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


【解决方案1】:

Official Design Recommendations状态

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

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

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

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

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


可能的解决方案:

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

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2023-04-02
    • 2018-06-19
    • 1970-01-01
    相关资源
    最近更新 更多