ObjectlistView 复选框问题

ObjectlistView Checkbox Issue

我在尝试使用 ObjectListview 时遇到问题。

我的模型是这样的:

public class object
{   
    public string name {get; set;}
    public int age {get; set;}
    public bool inuse {get; set;}
}

并且我通过 Visual Studio 中的设计器向 Win Forms 应用程序添加了一个 FastObjectListView。 然后,我添加了列并将每列的 AspectName 设置为模型 属性(第一列:AspectName:名称,第二列:AspectName:年龄,第三列:AspectName:inuse)。

之后,我用这个填充了ListView

using (var context = new objectDb())
{
    var objectlist = context.objects.ToList();
    fastoLV_Clean.SetObjects(objectlist);                             
    fastoLV_Clean.Refresh();
}       

有效,我可以在 ListView 中看到我的数据库条目。

现在我想添加一个 CheckBox 列,有人可以在其中选中或取消选中项目以将其删除,但我无法使该复选框起作用。

我添加了一个列并将 CheckBox 设置为 true,更改了 ListViewCheckedAspectName 现在我可以看到复选框,但是如果我单击它们进行检查则没有任何反应. 我认为我完全走错了路,我该怎么做才能让它发挥作用?

非常感谢!!

我不知道如何使用 ObjectListView 来包含任何不属于您的模型的项目。

那么简单的方法就是更改您的模型以包含一个 "Delete" 属性 然后您可以在您的 ObjectListView 中显示它。

当然,这并不总是可能的!特别是如果您正在处理写入 to/from 数据库或另一个持久层的项目。

然后诀窍是写一个派生的class,你的模型是基础class,然后你只需向其中添加删除列。但是在 ObjectListView 中显示之前,您需要将您的 Base 转换为派生的 class。

以下代码可以提供帮助。

您保持您已经完成的列设置。 假设你的(现在的基地)class 是这样定义的

 public class MyClass
 {   
     public string name { get; set; }
     public int age { get; set; }
     public bool inuse { get; set; }
 }

你派生的class继承自这个,添加删除属性和一个新的构造函数

public class MySecondClass : MyClass
{
    public bool Delete { get; set; }

    public MySecondClass(MyClass other)
    {
        //Copy from MyClass
        this.name = other.name;
        this.age = other.age;
        this.inuse = other.inuse;

        //Set default for new properties
        this.Delete = false;
    }
}

您检索对象并设置它们的代码如下所示

using (var context = new objectDb())
{
    var objectlist = context.objects.ToList();

    //Now we need to convert to the derived class type
     var secondlist = list.ConvertAll(x => new MySecondClass(x));

     //Then we setobjects using this new list
     fastoLV_Clean.SetObjects(secondlist);     
}