WPF Caliburn.Micro ListView 批量删除,有其他方法的大家一起交流一下_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > WPF Caliburn.Micro ListView 批量删除,有其他方法的大家一起交流一下

WPF Caliburn.Micro ListView 批量删除,有其他方法的大家一起交流一下

 2013/7/31 18:08:54  李晋  博客园  我要评论(0)
  • 摘要:做这种批量删除的时候我的想法是获取每行的ID,然后更具ID删除,看过一些博客,大部分都是直接写在.CS文件里面,将ListView和CheckBox关联起来,最后用checkboxck=senderAScheckbox可以取到选中的项.这个可以.但是用CM这个框架,这个就没办法了.我的解决方案就是在VIewModel里面声明一个全局变量,用来存放ID.然后使用ListView的SelectionChanged事件,每次选中改变的时候我就将ID记录下来,当点击删除按钮的时候就去去读这个全局变量
  • 标签:方法 一起 大家 view list 其他

  做这种批量删除的时候我的想法是获取每行的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() + ",";
}
}

}

发表评论
用户名: 匿名