Переопределение унаследованного Datacontext

#c# #xaml #windows-phone-8 #data-binding #windows-phone-8.1

#c# #xaml #windows-phone-8 #привязка данных #windows-phone-8.1

Вопрос:

У меня возникла проблема с переопределением datacontext, унаследованного от родителя. У меня установлен глобальный DataContext, после чего раздел Hub привязывается к списку в этой модели, который затем распространяется на Listivew. Теперь каждый элемент listview привязан к объекту, который также является DataContext элемента. Но каждый элемент listview имеет всплывающее окно. Теперь всплывающее окно наследует элемент DataContext, и это нормально, но один элемент во всплывающем окне должен быть привязан к элементу исходной глобальной модели.

Итак, в настоящее время у меня есть следующая страница

 <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 всегда равен нулю.

Любая помощь будет принята с благодарностью.

Комментарии:

1. В чем именно заключается проблема, с которой вы столкнулись? Что вы пробовали? Вы пытались установить контекст данных в исходном коде?

2. Это работает, если я устанавливаю его в фоновом режиме, но это было не то, что я искал. Я решил, добавив сопоставление с источником в статических ресурсах. Опубликую его немного позже.

3. Какие выражения привязки вы пробовали и какова форма вашей модели представления?

Ответ №1:

Итак, я решил это, добавив CollectionViewSource на страницу.Ресурсы, которые указывали на правильное свойство корневой ViewModel и с правильным DataContext.

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

Ответ №2:

У меня была похожая проблема, когда я хотел переопределить унаследованный DataContext и использовать DataContext по умолчанию, который я установил для всей страницы. Я решил это, установив свойство x:Name для элемента страницы <Page ... x:Name="MyPage"> , а затем привязал его к контексту данных, используя свойство element name объекта привязки следующим образом: Source="{Binding ElementName=MyPage, Path=DataContext.DesiredProperty}" . Надеюсь, это кому-нибудь поможет.