【发布时间】: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,例如:
<extToolkit:DoubleUpDown.Value><Binding .... -
是的,你是对的。我只是希望这真的能 100% 起作用:-)
标签: c# wpf xaml data-binding wpf-extended-toolkit