0

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

谢谢!

4

2 回答 2

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;
}
于 2013-02-19T00:25:40.340 回答
1

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

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

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

于 2013-02-19T00:19:19.570 回答