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