Tôi muốn xử lý sự kiện SelectionChanged trong phần tử DataFrid WPF cho tương tác người dùng/lựa chọn duy nhất và bỏ qua nếu đó là do ràng buộc hoặc các giá trị đã đặt khác. Bất kỳ ý tưởng làm thế nào tôi sẽ xác định nếu lựa chọn được thay đổi bởi tương tác người dùng? Hoặc bất kỳ sự kiện thay thế nào có thể thực hiện nhiệm vụ tương tự?sự kiện SelectionChanged trong WPF có thể được xử lý chỉ để tương tác với người dùng không?
Trả lời
Có thể thử kết hợp sự kiện SelectionChanged
với sự kiện PreviewMouseDown
. Khi người dùng nhấp vào hàng, bạn đặt một số thuộc tính và trong SelectionChanged
kiểm tra trình xử lý sự kiện nếu thay đổi thuộc tính.
mẫu mã XAML:
<DataGrid SelectionChanged="OnSelectionChanged" PreviewMouseDown="OnPreviewMouseDown">
<!--some code-->
</DataGrid>
Mã đằng sau:
bool isUserInteraction;
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (isUserInteraction)
{
//some code
isUserInteraction = false;
}
}
private void OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
{
isUserInteraction = true;
}
Cảm ơn bạn Rafal, lừa đã giúp. Cảm ơn bạn! –
Bất cứ ai có thể nghĩ ra một lý do nào đó, tại sao điều này không được thực hiện như sự kiện riêng biệt ...? Sử dụng MVVM-Pattern thay đổi luôn kích hoạt ngay cả khi thiết lập datacontext ....:/+1 Rafal cho thủ thuật này ':) – dba
Tôi nghĩ điều này sẽ thất bại trong nhiều trường hợp: (1) nếu người dùng nhấp vào một cách điều đó không dẫn đến thay đổi lựa chọn (ví dụ như nhấp vào hàng đã chọn hoặc sử dụng công cụ sửa đổi hoặc các nút chuột khác nhau), sau đó lựa chọn thay đổi do ràng buộc, ràng buộc sẽ được xem là hành động của người dùng. (2) Nếu người dùng sử dụng bàn phím để thay đổi lựa chọn, nó sẽ không được xem như là một hành động của người dùng. – hypehuman
hi bạn có thể sử dụng trong XAML:
<ComboBox x:Name="ComboBoxName" SelectionChanged="ComboBox_SelectionChanged">
<ComboBox.Style>
<Style TargetType="ComboBox">
<Style.Triggers>
<Trigger Property="IsDropDownOpen" Value="True">
<Setter Property="IsEditable" Value="True"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
và trong mã đằng sau:
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!((ComboBox)sender).IsEditable) return;
//Do Stuff;
}
Một phương pháp khác là xử lý các sự kiện DropDownOpened
và DropDownClosed
của ComboBox. Điều này là tốt hơn một chút so với câu trả lời chấp nhận của Rafal bởi vì nó ngăn cản cờ boolean bị mắc kẹt là đúng nếu người dùng nhấp vào ComboBox và sau đó nhấp vào một nơi khác gây ra ComboBox để đóng mà không có một lựa chọn được thực hiện. Những gì nó không giải quyết, mặc dù, là nếu ComboBox có bàn phím tập trung và người dùng khai thác các mũi tên lên và xuống để thay đổi lựa chọn.
private void Event_ComboBox_DropDownOpened(object sender, EventArgs e)
{
isUserInteraction = true;
}
private void Event_ComboBox_DropDownClosed(object sender, EventArgs e)
{
isUserInteraction = false;
}
private void Event_ComboBox_SelectedChanged(object sender, SelectionChangedEventArgs e)
{
if (isUserInteraction)
{
// Do work
}
}
- 1. Làm thế nào để xử lý sự kiện SelectionChanged của ComboBox với MVVM trong wpf?
- 2. WPF - Xử lý sự kiện từ điều khiển người dùng trong Chế độ xem
- 3. Làm cách nào để xử lý sự kiện TextChanged chỉ khi người dùng ngừng nhập?
- 4. Điều khiển người dùng được nạp động với Trình xử lý sự kiện - Hủy đăng ký
- 5. Xử lý sự kiện thoát khỏi WPF
- 6. WPF Datagrid: SelectionChanged sự kiện không được nâng lên khi SelectionUnit = "Cell"
- 7. Xử lý sự kiện của WPF User Control
- 8. WPF MVVM Sử dụng lệnh và xử lý sự kiện
- 9. Làm cách nào để mô phỏng tương tác người dùng (sự kiện nhấn phím) trong Qt?
- 10. Cách xử lý sự kiện trong MVVM
- 11. Làm thế nào để có được Fabric để tự động (thay vì tương tác với người dùng) tương tác với các lệnh shell? Kết hợp với pexpect?
- 12. Sự kiện giao diện người dùng ràng buộc WPF với các lệnh trong ViewModel
- 13. Trong .NET, chuỗi sự kiện nào sẽ được xử lý?
- 14. ComboBox- Sự kiện SelectionChanged có giá trị cũ, không phải giá trị mới
- 15. Xử lý sự kiện trong DataTemplate
- 16. Trình xử lý sự kiện có được xử lý không đồng bộ không?
- 17. Làm thế nào tôi có thể xử lý sự kiện bấm bánh xe chuột trong WPF?
- 18. Xử lý sự kiện được đóng gói với Enums
- 19. Có thể đặt mã đằng sau một từ điển tài nguyên trong WPF để xử lý sự kiện không?
- 20. Xử lý sự kiện với Jython & Swing
- 21. jquery .live() sự kiện tương tác
- 22. Sự khác biệt giữa Sự kiện với Người xử lý ủy quyền và những người không có gì?
- 23. xử lý sự kiện được chọn trong twitter bootstrap Typeahead?
- 24. Các xử lý sự kiện để chọn
- 25. Trình xử lý sự kiện có nên được trang trí với người được ủy quyền của họ không?
- 26. Jasmine không thể gián điệp xử lý sự kiện?
- 27. Làm thế nào để bạn xử lý một ComboBox SelectionChanged trong MVVM?
- 28. Đang chờ sự kiện được xử lý
- 29. Xác thực tự động Soundcloud PHP Api mà không có sự tương tác của người dùng
- 30. Tương tác của người dùng trên UIImageView
Bạn có thể hiển thị một số mã mẫu mà bạn đang cố gắng đạt được không? –