是否有一种方法可以使用其他ObservableCollection中添加/删除的项目更新观测值?
添加项目时,如何更新ViewModel的bindableCollection,在ExployObServableCollection中删除?
重要的是要注意我试图与caliburn.micro一起使用MVVM模式。
viemodel
private BindableCollection<Employees> _employees = new BindableCollection(OracleConnector.GetEmployeeRepositorys());
public BindableCollection<Employees> Employees
{
get
{
return _employees;
}
set
{
OracleConnector.List.CollectionChanged += (sender, args) =>
{
_employees = OracleConnector.List;
};
NotifyOfPropertyChange(() => Employees);
}
}
oracleconnector
public class OracleConnector
{
public static FullyObservableCollection<Employees> List = new FullyObservableCollection<Employees>();
public static FullyObservableCollection<Employees> GetEmployeeRepositorys()
{
using (IDbConnection cnn = GetDBConnection("localhost", 1521, "ORCL", "hr", "hr"))
{
var dyParam = new OracleDynamicParameters();
try
{
var output = cnn.Query<Employees>(OracleDynamicParameters.sqlSelect, param: dyParam).AsList();
foreach (Employees employees in output)
{
List.Add(employees);
}
}
catch (OracleException ex)
{
MessageBox.Show("Connection to database is not available.n" + ex.Message, "Database not available", MessageBoxButton.OK, MessageBoxImage.Error);
}
return List;
}
}
}
我能够检测到是否在全面bavebablecollection中进行了更改,但我不知道如何将它们传递给ViewModel。
添加新员工时,请在OracleConnector
类中使用IEventAggregator
。发布包含新员工的EmployeeAddedMessage
。确保您也发布正确的线程。您可能需要使用PublishOnUiThread
方法。然后,ShellViewModel
可以作为一种称为Handle(EmployeeAddedMessage msg)
的方法实现IHandle<EmployeeAddedMessage>
。在Handle
方法中,您可以将Employee
添加到适当的Employee
集合中。
您可能需要将OracleConnector
添加到应用程序Bootstrapper以及Caliburn Micro提供的EventAggregator
类。您的ShellViewModel
还需要在事件聚合器上调用Subscribe(this)
方法。OracleConnector
和ShellViewModel
都需要使用事件通知器的相同实例。因此,请确保将事件聚合器注册为单身人士。
有关使用事件通知的更多详细信息,请参见此处。另外,我的应用程序使用应用程序事件的事件通知。