Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在最小值和最大值之后绑定DoubleUpDown值_C#_Wpf_Xaml_Data Binding_Wpf Extended Toolkit - Fatal编程技术网

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

C# 在最小值和最大值之后绑定DoubleUpDown值,c#,wpf,xaml,data-binding,wpf-extended-toolkit,C#,Wpf,Xaml,Data Binding,Wpf Extended Toolkit,我有一个UserControl和一个DoubleUpDown。当我在列表框中选择项目时我想设置双向上下的最小值、最大值和值,这样用户就可以更改值而不是预定义的范围,而是在给定值周围的某个范围内。我使用以下代码: <extToolkit:DoubleUpDown Increment="0.1" Value="{Binding SelectedItem.MyValue, ElementName=listBox1, UpdateSourceTrigger=PropertyChanged, Con

我有一个
UserControl
和一个
DoubleUpDown
。当我在
列表框中选择项目时
我想设置
双向上下
最小值
最大值
,这样用户就可以更改
而不是预定义的范围,而是在给定值周围的某个范围内。我使用以下代码:

<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>  
一个的范围是4..8,两个的范围是0..2。如果我先选择一个,然后选择两个,它看起来像是
Two.MyVal=4
,因为该值是在1的范围仍然处于活动状态时插入的

如何更改代码以首先设置
最小值
最大值
,然后设置

状态

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

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

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

编辑:的公共源代码似乎考虑了
已初始化
,因此您遇到的问题实际上不应该发生

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


可能的解决办法:


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

我不能100%确定是否确实如此,但根据我的观察,在XAML中设置属性的顺序决定了如何初始化/分配属性。尝试在Max/Min之后绑定值,例如:
Yes,您是对的。我只希望这真的能100%的发挥作用:-)
Name | MyValue | MaxDif
-----------------------
 One |    6    |   2
 Two |    1    |   1