ListBox wpf上是否存在SelectionChanging事件

本文关键字:SelectionChanging 事件 存在 是否 wpf ListBox | 更新日期: 2023-09-27 17:59:54

我想要ListBox上的SelectionChanging事件,我可以根据某些条件取消它。。。有办法做到这一点吗?

谢谢!

ListBox wpf上是否存在SelectionChanging事件

您可以在SelectedItem 中执行此操作

示例:

    private string _selectedItem;
    public string SelectedItem
    {
        get { return _selectedItem; }
        set
        {
            if (value != WhatIWant)
            {
                return;
            }
            _selectedItem = value; 
        }
    }

这样,如果你不喜欢所选的值,可以直接保释,或者改为其他值。

DependencyProperites有一个很酷的小回调(CoerceValueCallback),您可以在将值提供给propertyChanged事件之前对其进行更改。

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;
}

否,在更改允许您取消更改的选择之前,库存WPF ListBox控件中没有触发的事件。

但是,在SelectionChangedEvent期间收到的SelectionChangedEventArgs类同时提供旧值(取消选择)和新值(选择)。您可以在该事件中应用您的逻辑,并在选择失败时重新设置。

我认为,如果你采用这种方法,用户可能会注意到选择跳跃的闪烁,但AFAIK这是你能做的最好的事情,而不需要子类化控件和实现你自己的SelectionChanging事件。

相关文章:
  • 没有找到相关文章