2013-02-19 2 views
0

Я хотел бы, чтобы событие SelectionChanging в ListBox, которое я могу отменить, основываясь на определенных условиях ... Есть ли способ сделать это?Есть ли событие SelectionChanging в ListBox wpf?

Спасибо!

+0

Что вы пытаетесь отменить? –

+0

@ sa_ddam213 что вы подразумеваете под раком? –

+0

@Mustafa Ekici, Не уверен, что вы говорите –

ответ

2

Вы можете быть в состоянии уйти с делать это внутри SelectedItem

Пример:

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

Таким образом, если вы не любите значения, выбранного для может только под залог, или изменения Somthing еще.

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

Нет, на складе нет события WPF ListBox управление, которое срабатывает перед изменением выбора, позволяющего отменить изменение.

Однако класс SelectionChangedEventArgs, который вы получаете в течение SelectionChangedEvent, предоставляет вам как старое значение (которое не выбрано), так и новое значение (выбранное). Вы можете применить свою логику в этом случае и сбросить выбор обратно, если он не сработает.

Я думаю, что пользователь может заметить мерцание выбора, если вы примете этот подход, но AFAIK это лучшее, что вы можете сделать, не подклассифицируя управление и не реализуя свое собственное событие SelectionChanging.