从ListView项中获取父DataContext

时间:2015-02-04 14:13:54

标签: c# listview binding windows-phone-8.1 winrt-xaml

我的情景: 在当前页面中,我设置了DataContext,其中包含两个属性,第一个(页面标题)Question,第二个(项目列表)Replies

我将Replies绑定到ItemsSource的{​​{1}}属性:

ListView

在此之前没有问题。在<ListView x:Name="responseList" ItemsSource="{Binding replies}"> <ListView.ItemTemplate> <DataTemplate> <local:CustomControl /> </DataTemplate> </ListView.ItemTemplate> </ListView> 内部,我还需要检索Custom Control元素的某些属性(在Question之外),将这些属性绑定到XAML中。 ListView

我看了这个,但没有运气,因为在WinRT中无法识别CustomControlWPF Databinding: How do I access the "parent" data context?

另一个不返回FindAncestorHow to access Parent's DataContext in Window 8 store apps

DataContext

1 个答案:

答案 0 :(得分:0)

您可以让Replies对他们回复的问题有一个(不可变的)引用。或者,也许更好,假设您的DataContextSomePageViewModel,其replies列表不属于您的域模型Reply,而是ReplyViewModel而不是Reply我们都知道答复和问题的相关部分。

这实际上并没有回答你的问题,但设计要好得多, 解决问题。

可以在不更改// Domain Model example class Question { public String Text { get; set; } public String Author { get; set; public IEnumerable<Reply> Replies { get; set; } } // Domain Model example class Reply { public String Author { get; set; } public String Text { get; set; } } // DataContext example class WhatYouUseAsDataContext { public Question Question { get; set; } // Your replies -- this is what your ListView binds to. public IEnumerable<ReplyViewModel> Replies { get; set; } public WhatYouUseAsDataContext() { Question = SomeWayToGetTheQuestion(); Replies = Question.Replies.Select(reply => new ReplyViewModel() { Reply = reply, QuestionAuthor = Question.Author }); } } // Newly introduced viewmodel class class ReplyViewModel { public Reply Reply { get; set; } public String QuestionAuthor { get; set; } } 域模型的情况下构建此方法的一种方法如下:

{{1}}