绑定到Page's数据上下文

本文关键字:数据 上下文 Page 绑定 | 更新日期: 2023-09-27 18:02:36

我发现需要绑定到PageDataContext,设置如下:

<d:Page.DataContext>
    <designTime:PayeesPageDesignViewModel />
</d:Page.DataContext>

在设计时。但是,我需要从具有不同数据上下文的子控件绑定到它:

<GridView x:Name="PayeesGridView"
          Margin="0,30,0,0"
          IsItemClickEnabled="True"
          ItemsSource="{Binding Payees}"
          SelectionChanged="PayeesGridView_OnSelectionChanged">

由于ItemsSource被设置为GridView,我的GridViewItemsDataContext被设置为Payees集合中的单个Payee对象。我的ViewModel有一个属性,我需要从转换器中的View引用该属性来确定项目的可见性。

我可以根据Payee对象的属性设置可见性,像这样:

<Border Width="250"
        Height="250"
        Background="Gray"
        Opacity="0.85"
        Visibility="{Binding Path=IsOpen,
                     Converter={StaticResource AccountStatusToVisibilityConverter}}">

但是我真正需要绑定的是PageDataContextSettings.ShowInactive属性。有没有办法从子控件中获取上下文?我使用的是WinRT,所以我没有FindAncestor绑定源的好处。

编辑

根据评论中的建议,我尝试将绑定更改为如下所示:

Visibility="{Binding Path=DataContext.Settings.ShowInactivePayees, ElementName=PageName,
             Converter={StaticResource AccountStatusToVisibilityConverter}}">

但是当我在AccountStatusToVisibilityConverter中设置断点时,转换器永远不会到达。

绑定到Page's数据上下文

如何在GridView中分配ItemTemplate ?如果不修改模板的内容,而是修改整个模板会怎么样?像这样的伪xaml…

<Page.Resources>
    <DataTemplate x:Key="ActiveTemplate"></DataTemplate>
    <DataTemplate x:Key="InactiveTemplate"></DataTemplate>
    <local:IsActiveToItemTemplateConverter x:Key="IsActiveToTemplate"
        ActiveTemplate="{StaticResource ActiveTemplate}"
        InactiveTemplate="{StaticResource InactiveTemplate}"
        />
</Page.Resources>
<GridView
    ItemsSoucre="{Binding Payees}"
    ItemTemplate="{Binding Settings.ShowInactive, Converter={StaticResource IsActiveToTemplate}}"
    IsItemClickEnabled="{Binding Settings.ShowInactive, Converter={StaticResource BooleanNot}}"
    />