Có cách nào để tự động cập nhật bộ lọc trên ICollectionView
mà không cần phải gọi số Refresh()
khi có thay đổi có liên quan không?Tự động làm mới Bộ lọc ICollectionView
tôi có như sau:
[Notify]
public ICollectionView Workers { get; set; }
Các [Thông báo] thuộc tính trong khách sạn này chỉ thực hiện INotifyPropertyChanged
nhưng nó dường như không thể làm gì trong tình huống này.
Workers = new CollectionViewSource { Source = DataManager.Data.Workers }.View;
Workers.Filter = w =>
{
Worker worker = w as Worker;
if (w == null)
return false;
return worker.Employer == this;
};
Trong XAML:
<TextBlock x:Name="WorkersTextBlock"
DataContext="{Binding PlayerGuild}"
FontFamily="Pericles"
Text="{Binding Workers.Count,
StringFormat=Workers : {0},
FallbackValue=Workers : 99}" />
Cập nhật: Dường như sử dụng ICollectionView
sẽ là cần thiết đối với tôi, vì vậy tôi muốn xem xét lại vấn đề này. Tôi đang thêm tiền thưởng cho câu hỏi này, người nhận sẽ là người có thể cung cấp một số thông tin chi tiết về cách thực hiện 'hand-off' ICollectionView
mà không cần phải được làm mới theo cách thủ công. Tại thời điểm này tôi mở cho bất kỳ ý tưởng.
Vâng, xem xét thuộc tính đó không phải là BCL, nó không phải là đáng ngạc nhiên rằng nó không bao gồm các trường hợp góc này. Trong thực tế, không có bất cứ điều gì trong WPF bao gồm trường hợp này, vì vậy bạn sẽ phải làm điều đó cho mình. Thuộc tính bộ lọc không phải là DP và thậm chí là không có gì trong bộ lọc sẽ kích hoạt sự kiện cập nhật. Có vẻ như bạn sẽ phải kích hoạt nó theo cách thủ công. Có lẽ trong cơ thể của bộ lọc? Bạn có thể tự tham khảo thông qua việc đóng cửa. Nhìn vào lambda, bạn sẽ phải tắt cuộc gọi để làm mới đến Dispatcher, vì vậy nó sẽ chạy sau khi bộ lọc được áp dụng. Ergh và thêm khối bool "brb updating" – Will
(không có nhiều ký tự) trông giống như không có cách nào xung quanh nó, ngoại trừ có thể mở rộng CVS và cập nhật trong bộ lọc, với kiểm tra để đảm bảo bạn không liên tục kích hoạt một bản cập nhật. Làm cho tinh thần tại sao đó không phải là BCL, phải không? Bộ lọc kích hoạt bản cập nhật, kích hoạt bộ lọc, và bật và bật ... – Will
Cảm ơn bạn đã giải thích. Có vẻ như tôi sẽ làm điều này bằng tay. –