应用程序范围内的可观测集合
本文关键字:集合 可观 范围内 应用程序 | 更新日期: 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; } }
我希望这是有道理的!