2012-03-26 77 views
0

我有一個綁定到ObservableCollection的ListBox。MouseLeftButtonUp上的ListBoxItem選擇

我想在鼠標釋放時選擇一個ListBoxItem(意味着MouseLeftButtonUp),以及我需要切換選擇。意味着當選擇ListBoxItem時,再次選擇該項目將取消選擇該項目,反之亦然。

當選擇ListBoxItem時,我需要應用不同的樣式。

我嘗試了以下操作。

我已經使用DataTemplate和樣式爲ListBoxItem,在EventSetter中,我訂閱了MouseLeftButtonUp事件,並在事件處理程序中選擇了該項目並切換它。

問題是有很多方法可以選擇項目(Ctrl +箭頭鍵,Shift +方向鍵,箭頭鍵,Ctrl + A)並應用樣式進行選擇。

我已經使用'Name'屬性來存儲ListBoxItem的前一狀態(Tag屬性已用於DataTemplate中數據綁定的其他目的)。

我們該如何做到這一點?

任何想法將不勝感激。

回答

0

我建議的第一件事是忘記使用MouseLeftButtonUp,而是將控件的SelectedItem綁定到代碼中的變量。這樣,如果用戶決定使用鍵盤,一切都被困住了。

<ListBox x:Name="lbItems" ItemsSource="{Binding Path=MyListItems}" SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}"/> 

public ObservableCollection<YourClass> MyListItems 
public YourClass SelectedItem 

這會在用戶選擇一個項目後自動設置SelectedItem。

那麼我會問,如果他們再次點擊它的項目取消選擇?這不是標準行爲,你是否需要取消選擇該項目?

如果你想記錄以前選定的項目,你可以有一個

private YourClass _previousSelectedItem; 

private YourClass _selectedItem; 
public YourClass SelectedItem 
    { 
    get { return _selectedItem;} 
    set { if (_selectedItem == value) return; 
      _previousSelectedItem = _selectedItem; 
      _selectedItem = value; 
     } 
    } 

您設置的SelectedItem更改時。

這是否給你一些想法?