插入新的SQL行后,如何更新listview?

时间:2018-10-31 09:12:41

标签: c# wpf listview binding linq-to-sql

我在 WPF APP 中有两个窗口,在第一个窗口中,管理员将添加票证信息,而在其他窗口中,员工应显示所有具有新票证的票证的列表。已添加(自动)。 在以下简单代码上:

//On User Window, set the itemSource
     DataClasses1DataContext dc = new DataClasses1DataContext(Properties.Settings.Default.AJFactoryConnectionString);
     public MainWindow() 
      {
        if (dc.DatabaseExists()) AllTasksListView.ItemsSource = dc.TicketTables;};
//List View 
<ListView Name="AllTasksListView" >
//Admin Window that allow him to add anew ticekt 
  public DataClasses1DataContext dc = new DataClasses1DataContext(Properties.Settings.Default.AJFactoryConnectionString);
        public void InsertNewTickt(string Status,string Descrption)
        {
            TicketTable x = new TicketTable
            {
                CreatedDate = DateTime.Now,
                Status = Status,
                DeliveryDate = DateTime.Now,
                Descrption = Descrption

            };
            dc.TicketTables.InsertOnSubmit(x);
            try
            {
                dc.SubmitChanges();
            }
            catch (Exception ee)
            {
                dc.SubmitChanges();
            }
}

一旦管理员添加了新票证( sql 中的新行),我需要一种立即更新listview的好方法。我是 WPF 的新手,我找到了很多解决方案,但在同一窗口中,就我而言,我有2个窗口。

1 个答案:

答案 0 :(得分:0)

ItemsSource中的ListView设置为ObservableCollection<TicketTable>,并将新创建的TicketTable对象添加到该对象中。管理窗口将需要引用MainWindow才能起作用。您可以为它注入参考,也可以从Application.Current.Windows属性中获取参考。

MainWindow:

if (dc.DatabaseExists()) 
    AllTasksListView.ItemsSource = new ObservableCollection<TicketTable>(dc.TicketTables);

管理窗口:

...
dc.TicketTables.InsertOnSubmit(x);
dc.SubmitChanges();
var mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
if (mainWindow != null)
{
    var sourceCollection = mainWindow.AllTasksListView as ObservableCollection<TicketTable>;
    if (sourceCollection != null)
        sourceCollection.Add(x);
}