应用程序范围内的可观测集合

本文关键字:集合 可观 范围内 应用程序 | 更新日期: 2023-09-27 17:59:47

如果我将Observable集合放在一个单独的.cs(class)文件中,并在我的MainPage.xaml中使用它,我该如何使存储在同一Observable集合中的所有数据以后都可以从不同的xaml页面中访问?

例如

MyClass.cs:
public ObservableCollection<String> oC = new ObservableCollection<String>();
MainPage.xaml.cs:
// add to observable collection
SecondPage.xaml.cs:
// access and use data stored in ObservableCollection

应用程序范围内的可观测集合

您可以将集合声明为静态成员。

或者实现singleton模式。

在XAML中绑定到集合时,需要在视图模型中创建一个访问器。

public ObservableCollection<String> Accessor
{
  get
  {
    return MyClass.oC;
  }
}

一个简单的方法是声明它为静态,并通过类型而不是实例访问它:

例如

class SomeClass 
{
    public static bool SomeBool = false;
}
class SomeOtherClass
{
    public void SomeMethod() 
    {
        Debug.Write(SomeClass.SomeBool); // Ouput = false
    }
}

请记住,这个可观察对象将是静态的,因此是一个单独的实例-对它的任何修改都将立即对访问它的所有对象可见-这意味着,如果一些代码正在迭代可观察对象,而另一个代码试图从中添加/删除-迭代器将抛出异常

如果是这种情况,请考虑另一种选择或使用锁定来确保单线程访问集合

这样的东西怎么样。无处不在的资源。。。

public class CollectionSrc
{
  public ObservableCollection<...> Col 
  { 
    get { return _col ?? (_col = new ObservableCollection<...>()); }
  }
}

App.xaml

<ns:CollectionSrc x:Key="ColSrc" /> <!--ns .. the namespace of CollectionSrc-->

现在,您可以在xaml代码中的任何位置访问ColSrc。例如

<ListBox ItemsSource={Binding Col, Source={StaticResource ColSrc}} />

我想你只想要这个:

MyClass.cs:
public static ObservableCollection<String> oC = new ObservableCollection<String>();
MainPage.xaml.cs:
// add to observable collection
SecondPage.xaml.cs:
// access and use data stored in ObservableCollection

一旦oC是静态的,您就可以从任何类/页面一次又一次地引用它。

但是,如果你想绑定到它(因为你不能在Windows 8应用程序中绑定到字段或静态属性),你需要让XAML页面在一个简单的属性中引用你的静态属性:

SecondPage.xaml.cs:
public static ObservableCollection<String> oC { get { return MyClass.oC; } }

我希望这是有道理的!