我在 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个窗口。
答案 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);
}