Tôi có một DataGrid có dữ liệu được làm mới bằng một quá trình nền sau mỗi 15 giây. Nếu bất kỳ dữ liệu nào thay đổi, tôi muốn chạy một hình động làm nổi bật ô có giá trị thay đổi màu vàng và sau đó mờ dần trở lại màu trắng. Tôi sắp xếp của nó có làm việc bằng cách làm như sau:Làm nổi bật các ô trong WPF DataGrid khi giá trị giới hạn thay đổi
Tôi tạo ra một phong cách với sự kiện kích hoạt trên Binding.TargetUpdated
<Style x:Key="ChangedCellStyle" TargetType="DataGridCell">
<Style.Triggers>
<EventTrigger RoutedEvent="Binding.TargetUpdated">
<BeginStoryboard>
<Storyboard>
<ColorAnimation Duration="00:00:15"
Storyboard.TargetProperty=
"(DataGridCell.Background).(SolidColorBrush.Color)"
From="Yellow" To="Transparent" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
Và sau đó áp dụng nó vào các cột tôi muốn làm nổi bật nếu một giá trị thay đổi
<DataGridTextColumn Header="Status"
Binding="{Binding Path=Status, NotifyOnTargetUpdated=True}"
CellStyle="{StaticResource ChangedCellStyle}" />
Nếu giá trị cho trường trạng thái trong cơ sở dữ liệu thay đổi, ô đánh dấu màu vàng giống như tôi muốn. Nhưng, có một vài vấn đề.
Trước tiên, khi lưới dữ liệu được tải ban đầu, toàn bộ cột được đánh dấu màu vàng. Điều này có ý nghĩa, bởi vì tất cả các giá trị đang được tải lần đầu tiên vì vậy bạn mong đợi TargetUpdated sẽ kích hoạt. Tôi chắc chắn có một số cách tôi có thể ngăn chặn điều này, nhưng đó là một điểm tương đối nhỏ.
Vấn đề thực sự là toàn bộ cột được đánh dấu màu vàng nếu lưới được sắp xếp hoặc lọc theo bất kỳ cách nào. Tôi đoán tôi không hiểu tại sao một loại sẽ khiến TargetUpdated kích hoạt vì dữ liệu không thay đổi, giống như cách nó được hiển thị. Vì vậy, câu hỏi của tôi là (1) làm thế nào tôi có thể ngăn chặn hành vi này trên tải ban đầu và sắp xếp/lọc, và (2) tôi đi đúng hướng và đây có phải là cách tốt để làm điều này không? Không. Tôi nên đề cập đến đây là MVVM.
Để sắp xếp giải pháp thay thế cho giải pháp bạn đề xuất ... 1) bạn có mong đợi danh sách lớn không? (trong trường hợp này có nghĩa là lớn> = 100 mục); và 2) bạn có mong đợi số lượng các mục trong danh sách thay đổi thường xuyên không? –
Đây thực chất là một ứng dụng hàng đợi trợ giúp liệt kê các lỗi về giao dịch và cho phép mọi người sở hữu một lỗi cụ thể và đánh dấu nó là đã giải quyết. Các giá trị không nên thay đổi thường xuyên, và tôi hy vọng họ sẽ nhận được ít hơn 100 lỗi mỗi ngày trong sản xuất. –
OK tuyệt vời, tôi thấy ý tưởng hiển thị các ô khác nhau thay đổi nền của nó một cách trơn tru khi nội dung của họ thay đổi, ví dụ, khi trạng thái của nhiệm vụ thay đổi hoặc người được giao nhiệm vụ ..., nhưng tôi đã làm một số nghiên cứu về điều đó và Tôi không tìm thấy một cách mà bạn có thể làm điều này chỉ bằng cách viết Xaml. Những gì tôi sẽ làm là viết một bộ sưu tập các đối tượng miền của bạn trong bộ nhớ, và mỗi lần bạn lấy danh sách từ máy chủ, thực hiện các phương thức tiện ích thực hiện so sánh dữ liệu vừa được truy xuất với dữ liệu đã có trong DataGrid và thực hiện thay đổi kiểu. –