有两页: MainPage 和 AddQuotePage
位于项目根文件夹中的MainPage.xaml有一个Frame
,用于加载位于 Views 文件夹中的AddQuotePage.xaml。
MainPage 包含标题栏RelativePanel
和SplitView
,用于在Frame
中显示汉堡包菜单和内容。
MainPage 就像在其Frame
个不同应用中加载的shell一样
MainPage 具有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引用属性以使数据绑定有效?
答案 0 :(得分:0)
我不确定你想在AddQuotePage中实现什么。出于不同的目的,答案可能会有所不同。 CategoryIcons
属性与ViewModel相关,通常不应该在“shell”中,而是在AddQuotePage的ViewModel中。但是,如果您只想在AddQuotePage中显示CategoryIcons
,一种简单的方法是我们可以在MainPage
中定义代表MainPage
本身的公共静态属性,然后在其他页面中我们可以使用此属性访问MainPage
中的属性。例如:
在 MainPage.xaml.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
设置Binding就像:
<GridView ItemsSource="{Binding CategoryIcons}">
<GridView.ItemTemplate>
<DataTemplate x:DataType="data:Icon">
<BitmapIcon UriSource="{x:Bind Uri}" />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>