如何使全局属性在 Windows 10 应用的所有页面中可见
本文关键字:应用 何使全 属性 Windows | 更新日期: 2023-09-27 18:33:33
我正在考虑一个代表应用商店的应用程序,我正在使用 GridView 查看项目,数据表示为可观察集合。
我的 XAML 代码 :
xmlns:data="using:ItemsStore.Models"
<GridView ItemsSource="{x:Bind ItemsList}">
<GridView.ItemTemplate>
<DataTemplate x:DataType="data:Item">
<StackPanel Orientation="Vertical">
<Image Source="{x:Bind ImageSource}"/>
<TextBlock Text="{x:Bind Name}"/>
<TextBlock Text="{x:Bind Disc}"/>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
主页中的 C# 代码:
public sealed partial class MainPage : Page
{
public ObservableCollection<Item> ItemsList;
public MainPage()
{
this.InitializeComponent();
ItemsList = new ObservableCollection<Item>();
}
}
我添加了一个按钮和一些输入控件来将新项目添加到 ItemsList,它工作得很好,但我想制作另一个页面,其中包含将新项目添加到列表的控件和逻辑,所以我制作了 AddNew.xaml 页面,但我无法访问主页中的 ObservableCollection 以向其添加新项目, 我还尝试使 ObservableCollection 成为静态字段,我设法访问了主页中的集合,但在 AddNew 页面中更新集合后,我在主页中没有看到任何变化。
我认为问题是因为 MainPage 构造函数中的初始化语句,每次我导航到 AddNew 页面并更新集合然后导航回主页时,Constrctor 被调用并重置集合,所以解决方案是关于使 ObservableCollection 成为 golbal 变量并将其初始化在 MainPage 构造函数之外的某个地方, 或者,只需在事件处理程序中初始化集合,该处理程序仅在应用启动时执行一次。
所以我的问题是:1-有没有办法使全局可观察集合对应用程序中的每个页面都可见?如果是这样,我如何在绑定语句中引用它(x:Bind theGlobalCollection(或
2-是否有任何事件在应用程序生命周期中仅被触发一次?
对于这个大问题,我感到非常抱歉,感谢您的时间。
如果我理解正确,您可以简单地从构造函数中删除 instatiation 并将字段更改为:
public static ObservableCollection<Item> ItemsList = new ObservableCollection<Item>();
这样,项目列表仅实例化一次。
基于此站点,如果您希望ObservableCollection
可以在 xaml 中进行数据绑定的所有视图,则可以使用 Application.Current.Resources
。有关详细信息,请参阅参考。
示例(来自源代码(:
public class PeopleViewModel : NotifyUIBase
{
public ListCollectionView PeopleCollectionView {get; set;}
private Person CurrentPerson
{
get { return PeopleCollectionView.CurrentItem as Person; }
set
{
PeopleCollectionView.MoveCurrentTo(value);
RaisePropertyChanged();
}
}
public PeopleViewModel()
{
PeopleCollectionView = Application.Current.Resources["PeopleCollectionView"] as ListCollectionView;
PeopleCollectionView.MoveCurrentToPosition(1);
}
}