WPF DataGrid多选行数据并绑定属性

打印 上一主题 下一主题

主题 994|帖子 994|积分 2982

  在WPF的第三方控件UI库中,有些DataGrid实现了但是又有一些没实现多选行绑定数据。所有我如今通过附加属性来实现。
  起首,实现DataGrid多选附加属性类
  1.     /// <summary>
  2.     /// DataGrid多选附加属性
  3.     /// </summary>
  4.     public class DataGridSelectedItemsBehavior : Behavior<DataGrid>
  5.     {
  6.         public IList SelectedItems
  7.         {
  8.             get => (IList)GetValue(SelectedItemsProperty);
  9.             set => SetValue(SelectedItemsProperty, value);
  10.         }
  11.         public static readonly DependencyProperty SelectedItemsProperty =
  12.             DependencyProperty.Register(
  13.                 nameof(SelectedItems),
  14.                 typeof(IList),
  15.                 typeof(DataGridSelectedItemsBehavior),
  16.                 new PropertyMetadata(null));
  17.         protected override void OnAttached()
  18.         {
  19.             base.OnAttached();
  20.             AssociatedObject.SelectionChanged += DataGrid_SelectionChanged;
  21.         }
  22.         protected override void OnDetaching()
  23.         {
  24.             base.OnDetaching();
  25.             AssociatedObject.SelectionChanged -= DataGrid_SelectionChanged;
  26.         }
  27.         private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
  28.         {
  29.             SelectedItems = AssociatedObject.SelectedItems;
  30.         }
  31.     }
复制代码
 
ViewModel实现,这里我利用了CommunityToolkit.Mvvm来与界面交互,你可以自行选择。
  1.     public class MainViewModel : ObservableObject
  2.     {
  3.         [ObservableProperty]
  4.         private ObservableCollection<ClassA> items = new();
  5.         [ObservableProperty]
  6.         private IList selectedItems = newArrayList();
  7.         [RelayCommand]
  8.         private void ExcuteConfirm()
  9.         {
  10.             foreach (var item in SelectedItems.Cast<ClassA>())
  11.             {
  12.             }
  13.         }
  14.     }
复制代码
 
此中DataGrid要把SelectionMode设置为Extended(表示可以多个选中),SelectionUnit设置为FullRow(表示完整行可以选中,单击单位格都会选中该行)。在XAML中利用之前你先看看你是否通过NuGet安装Microsoft.Xaml.Behaviors.Wpf。
  1. xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
  2. xmlns:local="clr-namespace:YourNamespace.Behaviors"
  3. <DataGrid ItemsSource="{{Binding Items}}" SelectionMode="Extended" SelectionUnit="FullRow">
  4.     <i:Interaction.Behaviors>
  5.         <local:DataGridSelectedItemsBehavior
  6.             VisibleItems="{{Binding SelectedItems, Mode=OneWayToSource}}"/>
  7.     </i:Interaction.Behaviors>
  8. </DataGrid><br>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

络腮胡菲菲

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表