C# 更新ListView';什么样的商品经常有货源?

C# 更新ListView';什么样的商品经常有货源?,c#,wpf,repository-pattern,itemssource,C#,Wpf,Repository Pattern,Itemssource,我有一个ListView,我将它的ItemsSource设置为列出所有分配(我的SQL数据库中的一个表,ORM是LINQ to SQL),如下所示: (这段代码正好在调用InitializeComponent()之后)为了方便起见,我添加了一个示例: Assignment sample1 = new Assignment() { Title = "A Test", Start = DateTime.Now,

我有一个ListView,我将它的ItemsSource设置为列出所有分配(我的SQL数据库中的一个表,ORM是LINQ to SQL),如下所示:

(这段代码正好在调用InitializeComponent()之后)为了方便起见,我添加了一个示例:

Assignment sample1 = new Assignment()
        {
            Title = "A Test",
            Start = DateTime.Now,
            Due = DateTime.Now,
            Kind = (byte) Kind.Assignment,
            Priority = (byte) Priority.Medium,
        };
        _repo.CreateAssignment(sample1);
        _repo.SaveChanges(); 
(其中_repo是我的存储库,因为我使用的是存储库模式)当我在设置ListView的ItemsSource之前放置这段代码时,示例显示。但是,如果此代码位位于设置ItemsSource之后的任何位置,则不会显示示例。如何在每次添加作业时不断更新项目资源?
我的假设:

public interface IAssignmentRepository
{
    Assignment CreateAssignment(Assignment assignmentToCreate);
    void DeleteAssignment(Assignment assignmentToDelete);
    Assignment GetAssignment(int id);
    IEnumerable<Assignment> ListAssignments();
    void SaveChanges();
}
公共接口IASignmentRepository
{
分配创建分配(分配分配创建);
作废删除转让(转让转让删除);
分配GetAssignment(int-id);
IEnumerable ListAssignments();
void SaveChanges();
}

我认为原因是您的IAssignmentRepository没有实现INotifyCollectionChanged接口

当您在设置ItemsSource之前添加数据时,一旦GUI更新,数据就已经存在以供查看。但是,当您进行后续更改时,由于存储库不会通知数据绑定控件,因此不会发生更新


我还假设您已经正确设置了DataContext。

我认为原因是您的IAssignmentRepository没有实现INotifyCollectionChanged接口

当您在设置ItemsSource之前添加数据时,一旦GUI更新,数据就已经存在以供查看。但是,当您进行后续更改时,由于存储库不会通知数据绑定控件,因此不会发生更新


我还假设您已经正确设置了DataContext。

实际上我没有设置DataContext属性。当然,您需要设置DataContext,否则数据绑定将无法工作。下面是一个快速测试(在您的repo实现INotifyCollectionChanged之后)——运行您的应用程序,查看在更新存储库时,是否在输出窗口中出现数据绑定错误。为了消除任何其他可能性,请尝试实现从ObservaleCollection继承的测试容器,因为我从未失败过。它为您实现INotifyCollectionChanged。如果使用此选项但未获得更新,您将知道需要正确获取DataContext集。因此,在CollectionChanged事件中,我只说ltvAssignments.ItemsSource=_repo.ListAssignments();?我可以将DataContext设置为_repo.ListAssignments();?我最好把你链接到这里,这里提供了所有血淋淋的细节。就DataContext而言,您可以将ListView DataContext设置为ListAssignments,那么您的XAML应该具有ItemsSource={Binding}。当然,我认为您在代码中设置了ItemsSource,因此我相信您只需将ItemsSource保持原样即可。Dave对于设置DataContext的需要是错误的<无需为
列表视图设置(或实际上以任何方式使用)code>DataContext
。ItemsSource可通过
INotifyCollectionChanged
正常工作并完全支持更新。我通常建议人们使用
DataContext
和bind
ItemsSource
,但这样做根本不需要
DataContext
。在任何情况下,您都应该使用
DataContext
,而不是直接设置
ItemsSource
,或者根本不使用它。分配给ItemsSource和DataContext是多余的、低效的,并且会让任何查看您的代码的人感到困惑。实际上我没有设置DataContext属性。当然,您需要设置DataContext,否则数据绑定将无法工作。下面是一个快速测试(在您的repo实现INotifyCollectionChanged之后)——运行您的应用程序,查看在更新存储库时,是否在输出窗口中出现数据绑定错误。为了消除任何其他可能性,请尝试实现从ObservaleCollection继承的测试容器,因为我从未失败过。它为您实现INotifyCollectionChanged。如果使用此选项但未获得更新,您将知道需要正确获取DataContext集。因此,在CollectionChanged事件中,我只说ltvAssignments.ItemsSource=_repo.ListAssignments();?我可以将DataContext设置为_repo.ListAssignments();?我最好把你链接到这里,这里提供了所有血淋淋的细节。就DataContext而言,您可以将ListView DataContext设置为ListAssignments,那么您的XAML应该具有ItemsSource={Binding}。当然,我认为您在代码中设置了ItemsSource,因此我相信您只需将ItemsSource保持原样即可。Dave对于设置DataContext的需要是错误的<无需为
列表视图设置(或实际上以任何方式使用)code>DataContext
。ItemsSource可通过
INotifyCollectionChanged
正常工作并完全支持更新。我通常建议人们使用
DataContext
和bind
ItemsSource
,但这样做根本不需要
DataContext
。在任何情况下,您都应该使用
DataContext
,而不是直接设置
ItemsSource
,或者根本不使用它。为ItemsSource和DataContext赋值是多余的、低效的,并且对任何查看代码的人来说都是混乱的。
public interface IAssignmentRepository
{
    Assignment CreateAssignment(Assignment assignmentToCreate);
    void DeleteAssignment(Assignment assignmentToDelete);
    Assignment GetAssignment(int id);
    IEnumerable<Assignment> ListAssignments();
    void SaveChanges();
}