WPF Caliburn.Micro ListView 批量删除,有其他方法的大家一起交流一下
做这种批量删除的时候我的想法是获取每行的ID,然后更具ID删除,看过一些博客,大部分都是直接写在.CS文件里面,将ListView和CheckBox关联起来,最后用checkbox ck=sender AS checkbox可以取到选中的项.这个可以.但是用CM这个框架,这个就没办法了.我的解决方案就是在VIewModel里面声明一个全局变量,用来存放ID.然后使用ListView的SelectionChanged事件,每次选中改变的时候我就将ID记录下来,当点击删除按钮的时候就去去读这个全局变量,然后批量删除.这个方法的缺点就是每次选中都会触发这个事件,就会调用相应的方法,调用我写的这个方法就需要类型转换,个人认为这样效率是不是就会降低.暂时也没想到其他更好的方法.在这里贴出来和大家一起讨论下,看看有没有更好的方法.
<ListView x:Name="list" Height="130" Margin="5"
cal:Message.Attach="[Event SelectionChanged] = [Action Change($this.SelectedItems)]"
>
<ListView.View>
<GridView>
<GridViewColumn x:Name="gvc">
<GridViewColumn.Header>
<CheckBox cal:Action.Target="{Binding ElementName=list}" cal:Message.Attach="[Event Checked]=[Action SelectAll];
[Event Unchecked]=[Action UnselectAll]">全选</CheckBox>
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox
IsChecked="{Binding IsSelected,RelativeSource={RelativeSource AncestorType=ListViewItem}}"></CheckBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="姓名" Width="60" DisplayMemberBinding="{Binding Path=Name}"/>
<GridViewColumn Header="年龄" Width="60" DisplayMemberBinding="{Binding Path=Age}"/>
<GridViewColumn Header="性别" Width="60" DisplayMemberBinding="{Binding Path=Sex}"/>
<GridViewColumn Header="入职日期" Width="80" DisplayMemberBinding="{Binding Path=Time}"/>
<GridViewColumn Header="国籍" Width="60" DisplayMemberBinding="{Binding Path=Controy}"/>
</GridView>
</ListView.View>
</ListView>
在与页面相对应的Model里面这样写
namespace Erp.ViewModels.Test
{
public class HelloDataViewModel : Screen
{
readonly WindowManager windowManager = new WindowManager();
public DataTable list { get; set; }
public int ID { get; set; }
public HelloDataViewModel()
{
list = SearchList();
}
public DataTable SearchList()
{
DataTable dt = new DataTable();
dt.Columns.Add("Age");
dt.Columns.Add("Name");
dt.Columns.Add("Sex");
dt.Columns.Add("Controy");
dt.Columns.Add("Time");
dt.Columns.Add("ID");
DataRow dr = dt.NewRow();
dr[0] = 23;
dr[1] = "张三";
dr[2] = "男";
dr[3] = "中国";
dr[4] = "2013-07-08";
dr[5] = 1;
dt.Rows.Add(dr);
DataRow dr1 = dt.NewRow();
dr1[0] = 26;
dr1[1] = "李氏";
dr1[2] = "男";
dr1[4] = "2013-05-06";
dr1[3] = "中国";
dr1[5] = 2;
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2[0] = 26;
dr2[1] = "王五";
dr2[2] = "男";
dr2[4] = "2013-05-06";
dr2[3] = "中国";
dr2[5] = 3;
dt.Rows.Add(dr2);
return dt;
}
public void Add()
{
OpenNewWindow();
}
public void OpenNewWindow()
{
windowManager.ShowWindow(new NewWindowViewModel());
}
public void Delete()
{
string b = a;
// windowManager.ShowWindow(new DeleteTestViewModel());
}
string a = "";
public void Change(object b)
{
a = "";
ObservableCollection<object> d = (ObservableCollection<object>)b;
for (int i = 0; i < d.Count; i++)
{
DataRowView di = (DataRowView)d[i];
int j = di.Row.ItemArray.Length;
a += di.Row.ItemArray[j-1].ToString() + ",";
}
}
}
WPF Caliburn.Micro ListView 批量删除,有其他方法的大家一起交流一下的更多相关文章
- WPF Caliburn.Micro ListView 批量删除 新方法.高效的
上一片我做的批量删除,是更具ListView的选项改变事件,然后放到一个全局变量里面,缺点已经说了.这次又找到一个好的方法.和大家分享一下.这次我将删除按钮的click事件里面的参数绑定为ListVi ...
- 利用ListView批量删除item
利用CheckBox选中一个或多个item,最后批量删除它们. 程序运行效果图如下: package com.test.adapter; import java.util.ArrayList; imp ...
- [WPF] Caliburn Micro学习三 Binding
Caliburn Micro学习一 Installation Caliburn Micro学习二 Infrastructure 如果说WPF推崇的Binding开辟了一条UI开发新的方式——让写代码的 ...
- [WPF] Caliburn Micro学习二 Infrastructure
Caliburn Micro学习一 Installation http://blog.csdn.net/alvachien/article/details/12985415 Step 1. 无论是通过 ...
- [WPF] Caliburn Micro学习一 Installation
在之前的文章(http://blog.csdn.net/alvachien/article/details/5670838)里面,已经提到过MVC和MVVM在Design Pattern上的比较. 首 ...
- Redis批量删除KEY的方法
Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作. 代码如下: redis-cli keys “* ...
- python中redis查看剩余过期时间以及用正则通配符批量删除key的方法
# -*- coding: utf-8 -*- import redis import datetime ''' # 1. redis设置过期时间的两种方式 expire函数设置过期时间为10秒.10 ...
- WPF + Caliburn.Micro +ActionMessage事件绑定
ActionMessage事件绑定是个人觉的算是CM的精髓了,比如说我在View里面放个button,我们要在他的click事件里面写东西,怎么写.如果是WPF我们直接在CS里面写就可以.但是CM不行 ...
- WPF+Caliburn.Micro 杂记
开发过程中的小问题总结 1DataGrid的Header里面给Checkbox绑定IsEnabled,绑不上去. 2由A页面跳转到B页面,再由B页面返回一个值 3DataGrid里面的行通过一个方法 ...
随机推荐
- Tips9: Destroy( )函数中的 延迟摧毁 功能
你知道Object.Destroy()函数吗?在脚本中用来摧毁一个游戏物体或组件,可是你知道他能在执行后延迟一段时间后才摧毁物体吗,其实很简单: using UnityEngine; public c ...
- Jellycons – iOS 8 图标下载(PNG, SKETCH)
Jellycons 这套由 LoveUI.co 设计图标包括30款扁平化,圆滑,丰富多彩的 iOS 8 应用程序图标,可以用于于个人和商业项目的使用.另外,PNG 格式包含11种尺寸(1024px, ...
- 表上的DELETE操作
在今天的文章里,我想给你快速展示下当我们从表里删除记录时,在SQL Server里发生了什么.首先我们来创建一个简单的表,在8KB的页上刚好能插入4条记录. -- Create a simple ta ...
- JS魔法堂:浏览器模式和文档模式怎么玩?
一.前言 从IE8开始引入了文档兼容模式的概念,作为开发人员的我们可以在开发人员工具中通过“浏览器模式”和“文档模式”(IE11开始改为“浏览器模式”改成更贴切的“用户代理字符串”)品味一番,它的出现 ...
- QCustomplot使用分享(五) 布局
一.历史对比 关于QCPLayoutElement这个元素的讲解之前,我想先对1.3.2release版本和2.0.0beta版本的该元素做以简单的对比介绍,首先,1.3.2release版本时,鼠标 ...
- 关于 CommonJS AMD CMD UMD 规范的差异总结
一.CommonJS 主要是用于服务器端的规范,比如目前的nodeJS. 根据CommonJS规范,一个单独的文件就是一个模块.每一个模块都是一个单独的作用域,也就是说,在一个文件定义的变量(还包括函 ...
- Entity FrameWork 延迟加载的本质(一)
1.集合的标准查询运算符方法,是来自于System.Linq.Enumerable里给IEnumerable接口添加的扩展方法 2.EF上下文里的DBSet<T>里的标准查询运算符方法,来 ...
- 实现虚拟模式的动态数据加载Windows窗体DataGridView控件 .net 4.5 (一)
实现虚拟模式的即时数据加载Windows窗体DataGridView控件 .net 4.5 原文地址 :http://msdn.microsoft.com/en-us/library/ms171624 ...
- 响应式布局(Responsive layout,RL)的简单Demo
★背景: 响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端--而不是为每个终端做一个特定的版本.这个概念是为解决 ...
- ajax post提交的方式
ajax的post注意事项 注意post请求的Content-Type为application/x-www-form-urlencoded,参数是在请求体中,即上面请求中的Form Data(后台通过 ...