2013-02-19 60 views
0

我想要一個ListBox上的SelectionChanging事件,我可以根據某些條件取消...有沒有辦法做到這一點?ListBox wpf上是否有SelectionChanging事件?

謝謝!

+0

你想取消什麼? – 2013-02-19 00:23:24

+0

@ sa_ddam213你的意思是癌症? – 2013-02-19 00:27:25

+0

@Mustafa Ekici,不確定你在說什麼 – 2013-02-19 00:44:30

回答

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

不,在WPF ListBox控件在更改允許您取消更改的選擇之前觸發沒有事件。

但是,您在SelectionChangedEvent期間收到的SelectionChangedEventArgs類爲您提供舊值(被取消選擇)和新值(被選中)。您可以在該事件中應用您的邏輯,並在選擇失敗時將選擇重置。

我認爲用戶可能會注意到選擇跳動的閃爍,如果你採取這種方法,但AFAIK這是最好的,你可以做的沒有繼承控制和實現自己的SelectionChanging事件。