Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定网格WPF MVVM的项目状态_C#_Wpf_Mvvm - Fatal编程技术网

C# 确定网格WPF MVVM的项目状态

C# 确定网格WPF MVVM的项目状态,c#,wpf,mvvm,C#,Wpf,Mvvm,在我的模型中有以下两种方法,“AddSelectedItemGrid”方法将向网格中添加选定项,“LoadDataGrid”将向网格中加载数据。我想添加一个新方法,将新添加的项目保存在网格中,但我不知道如何确定哪些项目是新添加或编辑的。如何获取行状态以确定需要保存哪些项目 模型 将项目添加到网格的步骤 从数据库加载网格 列表 公共列表ComputerDataGridListTest{get;set;} 有几种方法可以满足您的需求。您可以保留添加到集合中的项目的记录。在MVVM中,我们处理数据,通

在我的模型中有以下两种方法,“AddSelectedItemGrid”方法将向网格中添加选定项,“LoadDataGrid”将向网格中加载数据。我想添加一个新方法,将新添加的项目保存在网格中,但我不知道如何确定哪些项目是新添加或编辑的。如何获取行状态以确定需要保存哪些项目

模型 将项目添加到网格的步骤 从数据库加载网格 列表 公共列表ComputerDataGridListTest{get;set;}
有几种方法可以满足您的需求。您可以保留添加到集合中的项目的记录。在MVVM中,我们处理数据,通常不需要操纵任何UI元素来发现以下内容:

public List<ComputerDataGridBO> ItemsToSave { get; set; }

public void AddSelectedItemGrid(object Parameter)
{
    if (Parameter != null)
    {
        string test1 = ((Test.SharedLib.Data.testSubBO)(Parameter)).Term;
        Int64 test2 = Convert.ToInt64(((testSubBO)(Parameter)).ComputerId);

        ComputerDataGridBO newItem = new ComputerDataGridBO()
        {
            Term = test1,
            ComputerId = test2
        };
        ItemsToSave.Add(newItem);
        ComputerDataGridListTest.Add(newItem);
    }
}
或者,您也可以使用连接到
数据网格的处理程序来实现此功能,尽管这是实现此功能的一种不太MVVM的方法。无论哪种方式,您都可以使用
LinQ
在保存更改的项目和新项目时查找它们:

List<ComputerDataGridBO> itemsToSave = new List<ComputerDataGridBO>(
    ComputerDataGridListTest.Where(c => c.IsEdited));
if (itemsToSave != null)
{
    // save items in itemsToSave and set their IsEdited properties to false
}
List itemsToSave=新列表(
其中(c=>c.IsEdited));
if(itemsToSave!=null)
{
//在itemsToSave中保存项目,并将其IsEdit属性设置为false
}

当然,有更复杂的方法可以做到这一点,但我猜你现在已经了解了全局。

为什么不给ComputerDataGridBO添加一个布尔标志呢?你能提供一个例子吗?Sheridan似乎已经提供了一个例子!
class ComputerDataGridBO
{
    public Int64 ComputerId { get; set; }
    public string Term { get; set; }

}
public List<ComputerDataGridBO> ComputerDataGridListTest { get; set; }
public List<ComputerDataGridBO> ItemsToSave { get; set; }

public void AddSelectedItemGrid(object Parameter)
{
    if (Parameter != null)
    {
        string test1 = ((Test.SharedLib.Data.testSubBO)(Parameter)).Term;
        Int64 test2 = Convert.ToInt64(((testSubBO)(Parameter)).ComputerId);

        ComputerDataGridBO newItem = new ComputerDataGridBO()
        {
            Term = test1,
            ComputerId = test2
        };
        ItemsToSave.Add(newItem);
        ComputerDataGridListTest.Add(newItem);
    }
}
public bool IsEdited { get; set; }
public string Term 
{
    get { return term; }
    set { term = value; IsEdited = true; } // Do for each property
}
List<ComputerDataGridBO> itemsToSave = new List<ComputerDataGridBO>(
    ComputerDataGridListTest.Where(c => c.IsEdited));
if (itemsToSave != null)
{
    // save items in itemsToSave and set their IsEdited properties to false
}