我的情景:
在当前页面中,我设置了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中无法识别CustomControl
:
WPF Databinding: How do I access the "parent" data context?
另一个不返回FindAncestor
:How to access Parent's DataContext in Window 8 store apps
DataContext
答案 0 :(得分:0)
您可以让Replies
对他们回复的问题有一个(不可变的)引用。或者,也许更好,假设您的DataContext
是SomePageViewModel
,其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}}