zoukankan      html  css  js  c++  java
  • 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() + ",";
    }
    }

    }

  • 相关阅读:
    Mac电脑PHP环境-XAMPP:报错 Unable to load dynamic library的解决方法
    Mac下安装JDK(Day 12.05)
    Mac下配置Java Web开发环境
    StiReport使用
    深入浅出图解【计算机网络】 之 【TCP可靠传输的实现2: 超时重传+拥塞控制】
    深入浅出图解【计算机网络】 之 【TCP可靠传输的实现: 三次握手+滑动窗口】
    深入浅出图解【计算机网络】 之 【路由选择协议】
    由Leetcode详解算法 之 动态规划(DP)
    自定义装点博客的“门面”
    数据结构 之 常见的几种“排序”
  • 原文地址:https://www.cnblogs.com/lijin/p/3228280.html
Copyright © 2011-2022 走看看