从另一个类添加和删除ObservableCollection

时间:2018-08-03 01:32:46

标签: c# wpf data-binding

我创建了ObservableCollection,它可用于绑定等。现在我遇到了问题,无法从其他类访问它。尝试了大多数事情,但可能丢失了一些显而易见的事情。

public MyFavorites()
{
    ObservableServers = new ObservableCollection<Server>();
}

private ObservableCollection<Server> _myListOfServersObjects;
public ObservableCollection<Server> ObservableServers
{
    get => _myListOfServersObjects;
    set
    {
        if (_myListOfServersObjects != value)
        {
            _myListOfServersObjects = value;
            OnPropertyChanged("ObservableServers");
        }
    }
}

完整代码:https://pastebin.com/KLFHwhKg

所以我想添加:https://pastebin.com/p7dBDcXq

1 个答案:

答案 0 :(得分:0)

由于这是一个非常广泛的主题,并且与特定问题无关,因此可能会被标记。解决此问题的一般方法是创建一个界面,如下所示:

public interface IServerCollection
{
    IList<Server> ObservableServers { get; }
}

请注意,我已经将ObservableServers从ObservableCollection <>更改为IList <>。从应用程序其他部分的角度来看,实际的实现并不重要,因此请选择能够满足其需求的最基本的接口对象。实际的实现类将填充详细信息:

public class ServerCollection : IServerCollection
{
    private IList<Server> _myListOfServersObjects = new ObservableCollection<Server>();
    public IList<Server> ObservableServers {get => _myListOfServersObjects;}
}

因此,在应用程序中的某处会创建一个ServerCollection类型的实例,然后将其作为IList传递给需要它的任何对象,例如:

public IServerCollection ServerCollection {get; private set;}

public MyFavorites(IServerCollection serverCollection)
{
    ServerCollection = serverCollection;
}

这被广泛称为“控制反转”,而接口实例到您的类中的实际传递被称为“依赖注入”。网上都有关于这两种资源的大量资源,值得一读。他们解决了很多问题,但同时也创造了一个新问题:您发现自己传递了很多这些接口引用,并将它们存储在应用程序的多个级别。因此,在实际的应用程序中,通常会使用依赖项注入框架为您自动完成工作,对于.NET,选择的软件包中有9选10的是Ninject