Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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可观测采集数据集';当DataContext发生更改时,t将更新_C#_Wpf_Entity Framework_Mvvm_Observablecollection - Fatal编程技术网

C# WPF可观测采集数据集';当DataContext发生更改时,t将更新

C# WPF可观测采集数据集';当DataContext发生更改时,t将更新,c#,wpf,entity-framework,mvvm,observablecollection,C#,Wpf,Entity Framework,Mvvm,Observablecollection,我有Data=newobservetecollection(dataContext.Data) dataContext是我的实体数据是SQL Server表 现在我运行Import方法,它在SQL Server上填充数据表: public static void Import(DataTable table) { var dataContext = DataContext.Instance.Entities; foreach (DataRow r

我有
Data=newobservetecollection(dataContext.Data)

dataContext
是我的实体<代码>数据
是SQL Server表

现在我运行Import方法,它在SQL Server上填充
数据
表:

    public static void Import(DataTable table)
    {
        var dataContext = DataContext.Instance.Entities;

        foreach (DataRow row in table.Rows)
        {
            .......

            var dataRow = new DATA
            {
               .........
            };

            dataContext.AddToDATA(dataRow);
        }
        dataContext.SaveChanges();
    }

但是我的ObservableCollection
数据仍然是空的。如何更新它?

您需要从datacontext中注册数据,并在该点将其添加到可观察的集合中

public static void Import(DataTable table)
{
    var dataContext = DataContext.Instance.Entities;

    foreach (DataRow row in table.Rows)
    {
        .......

        var dataRow = new DATA
        {
           .........
        };

        dataContext.AddToDATA(dataRow);
    }
    dataContext.SaveChanges();

    var data = datContext.whateverretreval();

    Data = data;
}

您需要从datacontext中注册数据,并将其添加到此时的可观察集合中

public static void Import(DataTable table)
{
    var dataContext = DataContext.Instance.Entities;

    foreach (DataRow row in table.Rows)
    {
        .......

        var dataRow = new DATA
        {
           .........
        };

        dataContext.AddToDATA(dataRow);
    }
    dataContext.SaveChanges();

    var data = datContext.whateverretreval();

    Data = data;
}
:

初始化ObservaleCollection类的新实例 包含从指定集合复制的元素

这里的关键字是它从集合中复制元素。之后,它不会与传入的枚举保持任何同步。您的代码正在更新
数据上下文
对象,而不是
数据
对象(ObservableCollection)。您必须构建自己的ObservaleCollection同步版本,或者创建方法来保持同步

如果您不关心保持
dataContext
对象的同步,并且只想在一次性加载中使用它,那么在ObservableCollection的构造函数中使用它之前,您必须在该枚举中拥有所有适当的对象

我猜你会做类似的事情:

Data = new ObservableCollection<DATA>(dataContext.DATA)

// Afterwards...
Import(foobar);
Data=新的ObservableCollection(dataContext.Data)
//后来。。。
进口(foobar);;
应该是:

Import(foobar);

// Afterwards...
Data = new ObservableCollection<DATA>(dataContext.DATA)
导入(foobar);
//后来。。。
数据=新的ObservableCollection(dataContext.Data)

初始化ObservaleCollection类的新实例 包含从指定集合复制的元素

这里的关键字是它从集合中复制元素。之后,它不会与传入的枚举保持任何同步。您的代码正在更新
数据上下文
对象,而不是
数据
对象(ObservableCollection)。您必须构建自己的ObservaleCollection同步版本,或者创建方法来保持同步

如果您不关心保持
dataContext
对象的同步,并且只想在一次性加载中使用它,那么在ObservableCollection的构造函数中使用它之前,您必须在该枚举中拥有所有适当的对象

我猜你会做类似的事情:

Data = new ObservableCollection<DATA>(dataContext.DATA)

// Afterwards...
Import(foobar);
Data=新的ObservableCollection(dataContext.Data)
//后来。。。
进口(foobar);;
应该是:

Import(foobar);

// Afterwards...
Data = new ObservableCollection<DATA>(dataContext.DATA)
导入(foobar);
//后来。。。
数据=新的ObservableCollection(dataContext.Data)

如果您使用的是较新的
DbContext
API,您可以在
DbSet
上使用,它会。如果您使用的是较新的
DbContext
API,您可以在
DbSet
上使用,它会。感谢您的回答,它非常有用。应用程序的结构有点复杂<代码>数据
集合属于
文档视图模型
,但我从
仪表板视图模型
运行
导入(foobar)
:用户按导入按钮->仪表板视图模型的RelayCommand->导入(foobar)。实际上,我无法访问
仪表板视图模型
中的
数据
集合。你对我的情况有什么建议
DocumentViewModel
也有子代我正在考虑使用
Messenger
向所有
DocumentViewModel
的子代广播消息以更新其
数据集,但我不确定此解决方案是否会影响性能…感谢您的回答,它非常有用。应用程序的结构有点复杂<代码>数据
集合属于
文档视图模型
,但我从
仪表板视图模型
运行
导入(foobar)
:用户按导入按钮->仪表板视图模型的RelayCommand->导入(foobar)。实际上,我无法访问
仪表板视图模型
中的
数据
集合。你对我的情况有什么建议
DocumentViewModel
也有子代我正在考虑使用
Messenger
向所有
DocumentViewModel
的子代广播一条消息,以更新其
数据
集合,但我不确定此解决方案是否会影响性能。。。