覆盖继承的Datacontext

时间:2014-06-30 00:05:06

标签: c# xaml windows-phone-8 data-binding windows-phone-8.1

我在覆盖从父级继承的datacontext时遇到问题。我有全局DataContext集,之后Hub部分绑定到该模型中的列表,然后传播到Listivew。现在每个listview项都绑定到一个对象,该对象也是该项的DataContext。但是每个listview项都有弹出窗口。现在,弹出窗口继承了DataContext项,这很好,但是Flyout中的一个元素必须绑定到初始全局模型的元素。

所以我目前有以下页面

<Page
x:Class="LocationSave.HubPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:LocationSave"
Name="root"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core"
DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}"
xmlns:data="using:LocationSave.Data"
mc:Ignorable="d" FontFamily="Global User Interface">

<Page.Resources>
    <ResourceDictionary>
        <Flyout  x:Name="Edit_Flyout">
            <Border  DataContext="{Binding}" >
                <StackPanel Orientation="Vertical" > 
                    <ListView
                             DataContext= "{Binding The Problem is here}"
                              ItemsSource="{Binding}">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding}"/>
                            </DataTemplate>
                        </ListView.ItemTemplate>

                    </ListView>
                </StackPanel>
            </Border>
        </Flyout>

    </ResourceDictionary>
</Page.Resources>

<Grid x:Name="LayoutRoot">
    <Hub x:Name="Hub" x:Uid="Hub" >

        <HubSection x:Uid="Location_View" Header="Locations"
                    DataContext="{Binding Locations}" HeaderTemplate="{ThemeResource HubSectionHeaderTemplate}">
            <HubSection.Resources>


                <DataTemplate x:Key="Location_Item_Template">

                    <ListView 
                        AutomationProperties.AutomationId="ItemListViewSection5"
                        AutomationProperties.Name="Items In Group"
                        SelectionMode="None"
                        IsItemClickEnabled="True"
                        ItemsSource="{Binding}"
                        ItemTemplate="{StaticResource LocationItem_Template}"
                        ItemClick="ItemView_ItemClick"
                        ContinuumNavigationTransitionInfo.ExitElementContainer="True"/>


                </DataTemplate>
            </HubSection.Resources>

            <StaticResource ResourceKey="Location_Item_Template"/>

        </HubSection>

    </Hub>
</Grid>

我尝试使用路径等设置datacontext,似乎没有任何工作,并且继承没有被正确覆盖,DataContext始终为null。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

所以,我通过在Page.Resources中添加一个CollectionViewSource来解决它,它指向了根ViewModel的正确属性和正确的DataContext。

<CollectionViewSource x:Key="SuggestionsModel" Source="{Binding Suggestions}"></CollectionViewSource>

答案 1 :(得分:1)

我有一个类似的问题,我想覆盖继承的DataContext并使用我为整个页面设置的默认DataContext。我通过在Page元素<Page ... x:Name="MyPage">上设置x:Name属性然后使用Binding对象的element name属性绑定到其数据上下文来解决它:Source="{Binding ElementName=MyPage, Path=DataContext.DesiredProperty}"。希望这有助于某人。