如何在UWP中将元素属性绑定到祖先页的属性
本文关键字:属性 绑定 祖先 元素 UWP | 更新日期: 2023-09-27 17:57:40
有两个页面:MainPage和AddQuotePage
位于项目根文件夹中的MainPage.xaml有一个Frame
,它加载位于Views文件夹中的AddQuotePage.xaml。
MainPage包含标题栏作为RelativePanel
和SplitView
,用于显示汉堡菜单和Frame
中的内容。
MainPage的工作方式类似于在其Frame
不同应用程序中加载的shellMainPage具有List<Icon> CategoryIcons
属性。
AddQuotePage包含一个GridView
,我想为它设置ItemsSource="{Binding MainPage.CategoryIcons}"
并设置类似的ItemTemplate
<GridView ItemsSource="{Binding MainPage.CategoryIcons}">
<GridView.ItemTemplate>
<DataTemplate x:DataType="data:Icon">
<BitmapIcon UriSource="{x:Bind Uri}" />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
这不起作用。在WPF中,你会有{Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
,但这在UWP中不存在,或者至少我没有找到。
如何从MainPage引用属性以使数据绑定有效?
我不确定您想在AddQuotePage中实现什么。出于不同的目的,答案可能会有所不同。CategoryIcons
属性与ViewModel相关,通常不应该在"shell"中,而是在AddQuotePage的ViewModel中。但是,如果您只是想在AddQuotePage中显示CategoryIcons
,一种简单的方法是,我们可以在MainPage
中定义一个表示MainPage
本身的公共静态属性,然后在其他页面中,我们可以使用该属性访问MainPage
中的属性。例如:
在MainPage.xam.cs:中
public sealed partial class MainPage : Page
{
//define a public static property represent the MainPage itself
public static MainPage Main { get; set; }
public List<Icon> CategoryIcons { get; set; }
public MainPage()
{
this.InitializeComponent();
///initialize Main property
Main = this;
}
...
}
然后在AddQuotePage.xaml.cs中,我们可以将Page.DataContext
设置为MainPage.Main
public AddQuotePage()
{
this.InitializeComponent();
this.DataContext = MainPage.Main;
}
并且在GridView
中设置绑定类似:
<GridView ItemsSource="{Binding CategoryIcons}">
<GridView.ItemTemplate>
<DataTemplate x:DataType="data:Icon">
<BitmapIcon UriSource="{x:Bind Uri}" />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>