首页 > 其他分享 >Avalonia下DataGrid多选MVVM绑定的功能

Avalonia下DataGrid多选MVVM绑定的功能

时间:2024-05-30 19:12:11浏览次数:28  
标签:MVVM Xaml AssociatedObject SelectedItems SelectionChanged DataGrid using Avaloni

安装Avalonia.Xaml.Behaviors

Install-Package Avalonia.Xaml.Behaviors

DataGridSelectedItemsBehavior.cs

using Avalonia;
using Avalonia.Controls;
using Avalonia.Threading;
using Avalonia.Xaml.Interactivity;

namespace CgdataBase;

public class DataGridSelectedItemsBehavior : Behavior<DataGrid>
{
    public static readonly DirectProperty<DataGridSelectedItemsBehavior, IList> SelectedItemsProperty =
        AvaloniaProperty.RegisterDirect<DataGridSelectedItemsBehavior, IList>(nameof(SelectedItems),
            o => o.SelectedItems, (o, v) => o.SelectedItems = v);

    private IList _selectedItems;

    public IList SelectedItems
    {
        get => _selectedItems;
        set => SetAndRaise<IList>(SelectedItemsProperty, ref _selectedItems, value as IList);
    }

    protected override void OnAttached()
    {
        base.OnAttached();
        if (AssociatedObject is { })
        {
            AssociatedObject.SelectionChanged += AssociatedObject_SelectionChanged;
        }
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();
        if (AssociatedObject is { })
        {
            AssociatedObject.SelectionChanged -= AssociatedObject_SelectionChanged;
        }
    }

    private void AssociatedObject_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        Dispatcher.UIThread.Post(() =>
        {
            SelectedItems = AssociatedObject.SelectedItems;
        });
    }
}

前台代码

增加引用

    xmlns:i="using:Avalonia.Xaml.Interactivity"

绑定:

        <DataGrid
            IsReadOnly="True"
            ItemsSource="{Binding Items}"
            SelectedItem="{Binding SelectedItem}">

            <i:Interaction.Behaviors>
                <cg2:DataGridSelectedItemsBehavior SelectedItems="{Binding SelectedItems, Mode=TwoWay}" />
            </i:Interaction.Behaviors>
        </DataGrid>

后台代码

    [Reactive] public IList SelectedItems { get; set; }

使用:

var items = SelectedItems.Cast<SatelliteInfo>().ToArray();

标签:MVVM,Xaml,AssociatedObject,SelectedItems,SelectionChanged,DataGrid,using,Avaloni
From: https://www.cnblogs.com/wzwyc/p/18223064

相关文章

  • WPF MVVM如何在ViewModel直接操作控件对象
    早些年在WPF中使用COM组件时,需要在ViewModel中操作COM组件中的控件对象,但是这个控件对象又不支持绑定,后面的解决办法是在窗口加载时,将控件对象以参数传递到Loaded事件的处理命令中,然后将这个对象记录下来,后面就可以直接操作这个控件了。今天同事在使用WebView2的时候,又遇到这个......
  • Avalonia中引入资源文件
    CustomResources.axaml<ResourceDictionaryxmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:ctl="clr-namespace:CommandTerminal.Controls"><!--自定义的资源......
  • MVVM模式的优点以及与MVC模式的区别?
    1.MVVM模式的优点:1、低耦合:视图(View)可以独⽴于Model变化和修改,⼀个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。2、可重⽤性:你可以把⼀些视图逻辑放在⼀个ViewModel⾥⾯,让很多......
  • 实现Avalonia平台下低配版的Dock控件:实现TabControl的可关闭
    在弄一个项目,在WPF下用Dock控件,在Avalonia平台下实现也有一个Dock控件,但用起来有点复杂。Install-PackageDock.AvaloniaInstall-PackageDock.Model.Mvvm感兴趣的可以访问网站了解:https://github.com/wieslawsoltes/Dock其实本身用的比较简单,所以就想着,用TabControl来改一下......
  • Android 关于MVP、MVC、MVVM原理、使用方法、优缺点以及共同之处与不同之处详细介绍
    Android关于MVP、MVC、MVVM原理、使用方法、优缺点以及共同之处与不同之处详细介绍Android应用程序的设计模式,常见的三种模式是MVP(Model-View-Presenter)、MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)。它们在设计和组织Android应用程序中起着不同的作用,都......
  • WPF DataGrid使用 自动显示行号、全选、三级联动、拖拽
    1.DataGrid的使用自动显示行号(修复删除行时行号显示不正确)  ViewCodedgTool.LoadingRow+=newEventHandler<DataGridRowEventArgs>(dgTool_LoadingRow);dgTool.UnloadingRow+=newEventHandler<DataGridRowEventArgs>(dgTool_UnloadingRow);voi......
  • MVVM的工作原理和优点及其在实际项目中的优势和挑战
    MVVM的工作原理和优点及其在实际项目中的优势和挑战工作原理:MVVM(Model-View-ViewModel)模式通过引入ViewModel作为Model和View之间的桥梁,实现数据的双向绑定。ViewModel负责封装数据逻辑,暴露可绑定的属性给View,同时监听Model的变化,同步更新视图;反之,View的变化也能通过ViewModel......
  • MahApps.Metro的MVVM模式解析(二) 主题功能
    MahApps.Metro的MVVM模式解析(二)主题功能MahApps.Metro是一个开源的WPF框架,旨在为WPF应用程序提供现代和漂亮的用户界面。在MahApps.Metro中提供了切换主题的功能。经过多日的筛选和分析,在本文来理清它的脉络。1主题功能演示主题列表:白天主题效果:夜晚主题效果:2软件架构......
  • .net 直接在DataGridView控件中修改单元格数据,并保存到数据库
    1.获取datagridview单元格修改的内容//单元格的值发生改变时触发事件privatevoiddataGridView1_CellValueChanged(objectsender,DataGridViewCellEventArgse){//获取当前行绑定的内容AppraisalBasesitem=(AppraisalBases)dataGridView1.Rows[e.RowIndex].Da......
  • DataGridView 控件入门
    常用属性和方法ContextMenuStrip属性:当用户点击鼠标右键时(设置和contextMenuStrip挂钩)MultiSelect属性是否可以多行选择SelectionMode属性:设置选中方式,比如是否选中一整行(设置为FullRowSelect)Dock属性:设置显示位置AllowUserToAddRows属性:取......