我创建了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");
}
}
}
答案 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。