当其他观察力截面发生变化时,绑定的缩放会发生变化



是否有一种方法可以使用其他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)方法。OracleConnectorShellViewModel都需要使用事件通知器的相同实例。因此,请确保将事件聚合器注册为单身人士。

有关使用事件通知的更多详细信息,请参见此处。另外,我的应用程序使用应用程序事件的事件通知。

相关内容

最新更新