ОК, так, пара вещей здесь.
Во-первых, традиционный подход заключается в разделении данных и представления.Если вы гуглите «MVVM» или «MVC», вы увидите тонну об этом.Лично я рекомендую MVVM.Таким образом, у вас обычно не было бы страницы, которая связывается с другими страницами.Отображаемая страница («представление») должна привязываться к данным (ну, к «модели представления», представляющей данные), а не к другим страницам.
Во-вторых, страницы обычно отображаются в кадрах с помощью NavigateTo.Вы можете иметь StackPanel, содержащую фреймы, а затем загружать страницу в каждый фрейм, но это выглядит как избыточное убийство.Было бы более прямым просто иметь ListView и шаблон для деталей.Если у вас есть несколько типов детализации, вы можете использовать DataTemplateSelector в представлении списка.
В-третьих, в конечном итоге вы, вероятно, захотите обновить данные, для чего вам понадобится коллекция, которая уведомляет представление о представлении.изменения в выбранном списке деталей объекта.Это модель представления списка.Также каждая сущность (EntityDetail в вашем случае) должна уведомлять о своих свойствах в потоке пользовательского интерфейса (или иметь отдельный объект модели представления, который делает это), но я не буду вдаваться в подробности здесь.Опять же, я говорю об обычном способе ведения дел, конечно, есть и много других способов.
Итак ... что-то вроде этого возможно:
partial class DetailsPage {
public ObservableCollection<EntityDetail> EntityDetails {get;}
public DetailsPage( ObservableCollection<EntityDetail> entityDetails) {
this.EntityDetails = entityDetails;
}
}
<Page
x:Class="DetailsPage"
…
>
<Page.Resources>
<ResourceDictionary>
<DataTemplate x:Name="EntityDetailDataTemplate" x:DataType="local:EntityDetail">
<TextBlock Text={x:Bind Name, Mode=OneWay}/> (assuming Name is a property in EntityDetail)
</DataTemplate>
</ResourceDictionary>
</Page.Resources>
<ListView
ItemsSource={x:Bind EntityDetails, Mode=OneWay}
ItemTemplate={StaticResource EntityDetailDataTemplate}
…
>
</ListView>
</Page>