特定の条件に基づいてキャンセルできる ListBox の SelectionChanging イベントが欲しいのですが、これを行う方法はありますか?
ありがとう!
SelectedItem内でこれを行うことで逃げることができるかもしれません
例:
private string _selectedItem;
public string SelectedItem
{
get { return _selectedItem; }
set
{
if (value != WhatIWant)
{
return;
}
_selectedItem = value;
}
}
このように、選択した値が気に入らない場合は、単に保釈するか、他の何かに変更することができます。
DependancyProperitesには、propertyChangedイベントに伝播される前に値を変更できる、かっこいい小さなコールバック(CoerceValueCallback)があります。
public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.Register("SelectedItem", typeof(string), typeof(MainWindow),
new UIPropertyMetadata(string.Empty,new PropertyChangedCallback(PropertyChanged),
new CoerceValueCallback(CoerceValue)));
private static void PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
}
private static object CoerceValue(DependencyObject d, object baseValue)
{
if (baseValue != WhatIWasExpecting)
{
return WhatIWant;
}
return baseValue;
}
いいえ、ListBox
変更をキャンセルできる選択を変更する前に起動するイベントは、ストックWPFコントロールにはありません。
ただし、のSelectionChangedEventArgs
間に受け取るクラスはSelectionChangedEvent
、古い値(選択解除されている)と新しい値(選択されている)の両方を提供します。そのイベントでロジックを適用し、失敗した場合は選択をリセットすることができます。
このアプローチを採用すると、ユーザーは選択範囲のちらつきに気付くかもしれませんが、AFAIKは、コントロールをサブクラス化して独自のSelectionChanging
イベントを実装せずに実行できる最善の方法です。