2013-06-14 26 views
5

Tôi có một ListBox mà đang được lọc như thế này:Giữ SelectedItem trong bộ lọc của CollectionViewSource

var view = CollectionViewSource.GetDefaultView(FilterSource); 
view.Filter = FilterCode; 

Tôi chạy vào một vấn đề mà các SelectedItem đang bị mất khi bộ lọc được sử dụng với mã viewmodel như thế này:

VM 
{ 
    public ObservableCollection<Model> Items{get;set;} 
    public Model SelectedItem 
    { 
     get{return _selectedItem;} 
     set{_selectedItem = value; NotifyPropertyChanged();} 
    } 
} 

Khi bộ lọc được áp dụng, SelectedItem được thiết lập để null. Tuy nhiên, tôi muốn giữ mục đã chọn đó trừ khi người dùng thực sự nhấp vào nó. Nếu bộ lọc bị xóa thì mục vẫn chọn vẫn được chọn. Mô hình có một tài sản IsSelected, và tôi đã cố gắng suy nghĩ về cách để truy vấn tài sản IsSelected. Tuy nhiên, sau đó ràng buộc của khung nhìn sẽ không hoạt động theo cách tôi mong đợi .... hoặc ít nhất tôi đang đi trong vòng kết nối nghĩ rằng nó không thể

+0

nếu bộ sưu tập của bạn có một số khóa chính, bạn có thể lưu id này trước khi lọc và thử đặt selecteditem bằng id này sau khi lọc – blindmeis

Trả lời

0

Cách duy nhất của tôi để hoàn thành một sửa chữa ở đây là như sau trong SelectionChanged sự kiện:

if (e.AddedItems.Count == 0 && e.RemovedItems.Count >= 0) 
    SpecialtyListBox.SelectedItem = e.RemovedItems[0]; 

Nhưng, điều này có vẻ thực sự bị hack và buộc phải luôn có một mục được chọn khi một mục ban đầu được chọn. Trong trường hợp này, điều đó có thể hiệu quả, nhưng tôi vẫn muốn xem liệu có ai có giải pháp tốt hơn không?

0

Tôi gặp sự cố tương tự, trong đó hộp danh sách được hiển thị dưới dạng chế độ xem theo thẻ. Tôi giải quyết vấn đề bằng cách tạo ra một Converter để tạo ra một cờ Boolean cho "isActive" và gán nó cho CollectionViewSource.IsLiveFilteringRequested. Điều này đã ngăn các hộp danh sách không hoạt động cập nhật mục đã chọn.

0

Bạn có thể sửa lỗi này bằng cách tạo bộ lọc luôn thêm mục được chọn hiện tại vào các mục được lọc. Nếu điều này không thể được thực hiện trực tiếp, chỉ cần giữ mục đã chọn trong một biến riêng biệt.

Các vấn đề liên quan