ListBox wpf上是否有SelectionChanging事件?

时间:2013-02-19 00:12:42

标签: c# wpf

我想在ListBox上的SelectionChanging事件,我可以根据某些条件取消...有没有办法做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以在SelectedItem

中完成此操作

示例:

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

这种方式如果您不喜欢所选的值可以保释,或者改为其他。

DependancyProperites有一个很酷的小回调(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;
}

答案 1 :(得分:1)

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

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

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