Các tinh chỉnh hiệu suất tốt nhất cho việc lọc, đã chuyển đổi DataGridRow Visibility. Nó tạo ra tầm quan trọng của sự khác biệt!
1.Thêm thuộc tính có thể chia sẻ vào mục bộ sưu tập mà bạn liên kết ItemSource của DataGrid với.
private bool _isVisible = true;
public bool IsVisible
{
get { return _isVisible; }
set
{
if (_isVisible == value)
return;
_isVisible = value;
RaisePropertyChanged(()=>IsVisible);
}
}
2.Trigger Visibility của DataGridRow bằng cách gắn nó vào bất động sản IsVisible của bạn:
<DataGrid.ItemContainerStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Visibility"
Value="{Binding Path=IsVisible,
Converter={StaticResource BoolToVisibility}}"/>
</Style>
</DataGrid.ItemContainerStyle>
3.Well, bạn gotta thiết lập IsVisible nơi nào đó tôi đoán quá, giống như trong ViewModel của bạn. Đây chỉ là mẫu của những gì tôi đang làm (chỉ cần sao chép/dán công việc) - về cơ bản thiết lập IsVisible thành true hoặc false dựa trên một số tiêu chí trong ViewModel của tôi:
FilterViewModel.OnFilter += (s, a) =>
{
foreach (Row row in ViewModel.Rows)
row.IsVisible = !FilterViewModel.FilteringItems.Any(item =>
item.IsSelected && item.Name == row.Name);
};
Nguồn
2012-03-15 18:38:20
Điều này làm việc cho tôi. Đây là cách một vấn đề tương tự có thể được giải quyết trong Angular bằng cách này :). – Den