lightswitch datagrid 动态添加复选框的功能。

本文介绍了如何在LightSwitch中通过注入方式为Datagrid添加复选框,以实现多选功能。包括代码示例、关键步骤解析及在特定界面的应用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lightswitch中非自定义datagrid 使用注入的方式添加复选框,以便用户可以进行多项选择,


[csharp] view plaincopy
using Microsoft.LightSwitch;  
using Microsoft.LightSwitch.Client;  
using Microsoft.LightSwitch.Presentation;  
using System;  
using System.Linq;  
using System.Collections.ObjectModel;  
using System.Net;  
using System.Windows;  
using System.Windows.Controls;  
using System.Windows.Documents;  
using System.Windows.Ink;  
using System.Windows.Input;  
using System.Windows.Markup;  
using System.Windows.Media;  
using System.Windows.Media.Animation;  
using System.Windows.Shapes;  
using Microsoft.LightSwitch.Framework.Client;  
using Microsoft.LightSwitch.Presentation.Extensions;  
using System.Diagnostics;  
using Microsoft.LightSwitch.Presentation.Implementation;  
using System.Collections.Generic;  
namespace LightSwitchApplication  
{  
    public static class MultiSelectGridExtensions  
    {  
        public static void AddCheckBoxColumnForMultiSelection<T>(this IContentItemProxy gridProxy, ObservableCollection<T> selectedItems) where T : class,IEntityObject  
        {  
            EventHandler<ControlAvailableEventArgs> gridProxy_ControlAvailable = null;  
  
            gridProxy_ControlAvailable = (s1, e1) =>  
            {  
                DataGrid dataGrid = e1.Control as DataGrid;  
                var contentItem = dataGrid.DataContext as IContentItem;  
                var visualCollection = (contentItem.Value) as IVisualCollection;  
                dataGrid.LoadingRow += new EventHandler<DataGridRowEventArgs>((s2, e2) =>  
                {  
                    DataGridColumn column = dataGrid.Columns[0];  
                    var checkBox = column.GetCellContent(e2.Row) as CheckBox;  
                    T currentRowItem = e2.Row.DataContext as T;  
                    if (currentRowItem != null)  
                    {  
                        checkBox.IsChecked = selectedItems.Contains(currentRowItem);  
                    }  
  
                    RoutedEventHandler checkboxClick = null;  
                    checkboxClick = (  
                        (s3, e3) =>  
                        {  
                            var selectedItem = dataGrid.SelectedItem as T;  
                            if (selectedItem == null)  
                            {  
                                return;  
                            }  
                            if (checkBox.IsChecked ?? false)  
                            {  
                                if (!selectedItems.Contains(selectedItem))  
                                {  
                                    selectedItems.Add(selectedItem);  
                                }  
                            }  
                            else  
                            {  
                                selectedItems.Remove(selectedItem);  
                            }  
                            TriggerCanExecute(visualCollection);  
                        });  
                    checkBox.Click += checkboxClick;  
                });  
  
                var col = new DataGridTemplateColumn(); // 动态添加模板  
                var xaml =  
                    @"<DataTemplate  xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">  
                    <CheckBox/>  
                </DataTemplate>";  
                var dataTemplate = XamlReader.Load(xaml) as DataTemplate;  
                col.CellTemplate = dataTemplate;  
                dataGrid.Columns.Insert(0, col);  
  
                gridProxy.ControlAvailable -= gridProxy_ControlAvailable;  
            };  
  
            gridProxy.ControlAvailable += gridProxy_ControlAvailable;  
        }  
        private static void TriggerCanExecute(IVisualCollection visualCollection)  
        {  
            //事件处理  
              
            //  
            var currentItem = visualCollection.SelectedItem;  
            var collection = visualCollection as IEnumerable<IEntityObject>;  
  
            if (!visualCollection.SelectedItem.Equals(collection.Last()))  
            {  
                visualCollection.SelectedItem = collection.Last();  
            }  
            else  
            {  
                visualCollection.SelectedItem = collection.First();  
            }  
            visualCollection.SelectedItem = currentItem;  
        }  
    }  
}  




在需要的界面中用法如下:
[csharp] view plaincopy
public partial class EditableProductsGrid  
    {  
        ObservableCollection<Product> SelectedProducts = new ObservableCollection<Product>();  
  
        partial void EditableProductsGrid_InitializeDataWorkspace(List<IDataService> saveChangesTo)  
        {  
            this.FindControl("grid").AddCheckBoxColumnForMultiSelection<Product>(SelectedProducts);  
        }  
  
        partial void DoSomethingWithSelection_Execute()  
        {  
            foreach (var item in SelectedProducts)  
            {  
                this.ShowMessageBox(item.ProductName);  
            }  
        }  
  
        partial void DoSomethingWithSelection_CanExecute(ref bool result)  
        {  
            result = this.Products.SelectedItem != null && SelectedProducts.Count >= 1; ;  
        }  
}  




版权声明:本文为博主原创文章,未经博主允许不得转载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值