网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > .Net >

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

时间:2025-03-10 16:58

人气:

作者:admin

标签:

导读:在WPF的第三方控件UI库中,有些DataGrid实现了但是又有一些没实现多选行绑定数据。所有我现在通过附加属性来实现。 首先,实现DataGrid多选附加属性类 /// lt;summarygt; /// DataGrid多选附加属...

  在WPF的第三方控件UI库中,有些DataGrid实现了但是又有一些没实现多选行绑定数据。所有我现在通过附加属性来实现。

  首先,实现DataGrid多选附加属性类

    /// <summary>
    /// DataGrid多选附加属性
    /// </summary>
    public class DataGridSelectedItemsBehavior : Behavior<DataGrid>
    {
        public IList SelectedItems
        {
            get => (IList)GetValue(SelectedItemsProperty);
            set => SetValue(SelectedItemsProperty, value);
        }

        public static readonly DependencyProperty SelectedItemsProperty =
            DependencyProperty.Register(
                nameof(SelectedItems),
                typeof(IList),
                typeof(DataGridSelectedItemsBehavior),
                new PropertyMetadata(null));

        protected override void OnAttached()
        {
            base.OnAttached();
            AssociatedObject.SelectionChanged += DataGrid_SelectionChanged;
        }

        protected override void OnDetaching()
        {
            base.OnDetaching();
            AssociatedObject.SelectionChanged -= DataGrid_SelectionChanged;
        }

        private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            SelectedItems = AssociatedObject.SelectedItems;
        }
    }

 

ViewModel实现,这里我使用了CommunityToolkit.Mvvm来与界面交互,你可以自行选择。

    public class MainViewModel : ObservableObject
    {

        [ObservableProperty]
        private ObservableCollection<ClassA> items = new();
        [ObservableProperty]
        private IList selectedItems = newArrayList();

        [RelayCommand]
        private void ExcuteConfirm()
        {
            foreach (var item in SelectedItems.Cast<ClassA>())
            {

            }
        }
    }

 

其中DataGrid要把SelectionMode设置为Extended(表示可以多个选中),SelectionUnit设置为FullRow(表示完整行可以选中,单击单元格都会选中该行)。在XAML中使用之前你先看看你是否通过NuGet安装Microsoft.Xaml.Behaviors.Wpf。

<!-- 引用命名空间 Local 是你附加属性类所在的文件位置-->
xmlns:i="http://schemas.microsoft.com/xaml/behaviors" 
xmlns:local="clr-namespace:YourNamespace.Behaviors"
 
<!-- DataGrid定义 -->
<DataGrid ItemsSource="{{Binding Items}}" SelectionMode="Extended" SelectionUnit="FullRow">
    <i:Interaction.Behaviors>
        <local:DataGridSelectedItemsBehavior
            VisibleItems="{{Binding SelectedItems, Mode=OneWayToSource}}"/>
    </i:Interaction.Behaviors>
</DataGrid>
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信