私はIntegerUpDown
このように持っています
<xctk:IntegerUpDown Value ="{Binding SomeValue}", Maximum="2" Minimum="0"/>.
値が - の場合、私はそうでしたSomeValue == 2 (Maximum)
。SomeValue = 0 (Minimum)
コントロールの上矢印をクリックしたときに設定したい。
どうやってやるの?
私はIntegerUpDown
このように持っています
<xctk:IntegerUpDown Value ="{Binding SomeValue}", Maximum="2" Minimum="0"/>.
値が - の場合、私はそうでしたSomeValue == 2 (Maximum)
。SomeValue = 0 (Minimum)
コントロールの上矢印をクリックしたときに設定したい。
どうやってやるの?
ビュー側で実行したい場合は、単純な汚れたソリューションの場合、ValueChanged イベントを処理して、最小値または最大値に達しているかどうかを確認することをお勧めします。最大値/最小値に達したときに値を変更することはおそらくできないため、値を に設定し、
<xctk:IntegerUpDown Value ="{Binding SomeValue}", Maximum="3" Minimum="-1"/>.
到達した場合はそれに応じて 0 または 2 に変更することをお勧めします。
より良いよりクリーンなソリューションのために、最大値/最小値を超えて値を変更しようとしたときに発生する他のイベントがわかりません。ただし、メソッドに基づいてコントロールを作成し、メソッドIntegerUpDown
をオーバーライドすることもできます。int IncrementValue(int value, int increment)
int DecrementValue(int value, int increment)
Value changed イベントを使用して、現在の値を取得できます。値が変更されたイベントで値を確認し、最大値と等しい場合は、次のように最小値に設定します。
private void IntegerUpDown_ValueChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var updown = (sender as IntegerUpDown);
if (updown.Value == updown.Maximum)
updown.Value = updown.Minimum;
}
MVVM を使用している場合は、対話動作またはコマンドを使用して同じことを行います。
または、ViewModel のプロパティに最大値、最小値をバインドできるように、Value を ViewModel のプロパティにバインドします。また、Value プロパティのプロパティ変更イベントで値を確認し、Maximum value プロパティを超えた場合に Value を設定することができます。
xaml で最小/最大制限を削除することもできます。
<xctk:IntegerUpDown Value ="{Binding SomeValue}" />
次に、ビュー モデルで最小/最大制限とロールオーバーを処理します。
public double SomeValue
{
get { return _SomeValue; }
set
{
if (value < 0)
_SomeValue = 0;
else if (value >= 2)
_SomeValue = 0;
else
_SomeValue = value;
OnPropertyChanged("SomeValue");
}
}
private double _SomeValue = 1;