在我的应用程序中,我有DataGrid
中的成员列表,当选择成员时,会使用其详细信息填充成员个人资料。会员资料由10 + TextBlocks
组成,每个文字值都绑定到DependencyProperty (DP)
类型的个人string
。
生成的成员列表为List<MEMBERINFO>
,SelectedMember DP
为MEMBERINFO类型。
public partial class MEMBERINFO
{
public GD_MEMBERDETAILS MEMBERDETAILS { get; set; }
public List<GD_ADDRESSDETAILS> ADDRESSDETAILS { get; set; }
public List<GD_VESSELDETAILS> BOATDETAILS { get; set; }
public GD_MEMBERSHIPS MEMBERSHIP { get; set; }
public List<string> FAMILYMEMBERS { get; set; }
}
目前,当DataGrid
中的成员被选中时,SelectedMember
值被分配给个人DependencyProperties
,以便在会员资料中显示,例如
MemberName = SelectedMember.MEMBERINFO.MEMBER_NAME;
虽然这有效,但我觉得应该有一个更简洁的方法来做到这一点,因为我已经拥有SelectedMember
所需的所有信息。因此,有没有一种方法可以将一个容器内的所有TextBlocks与一个绑定到DependencyProperties
的ItemsSource一起放入容器中,而不是拥有10+字符串SelectedMember
并将其值分配给SelectedMember
。到SelectedMember
内的属性?那么就像使用DataGrid一样?我知道ListView和ListBox也有ItemsSource,但我的成员个人资料不是一个列表,我只想要一个简单的容器,它不像DataGrids和ListViews / Box那样具有任何固有的功能。
注意:在另一个有类似问题的应用程序中,我设法操纵DataGrid以删除其固有的DataGrid功能,并在单个单元格中显示多个文本块,以便我可以使用其ItemsSource。但这样做真的很痛苦,所以我觉得应该有一个更简单的方法!
答案 0 :(得分:1)
您不能直接将TextBlock
绑定到源属性吗?:
<ItemsControl ...>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding DataContext.SelectedMember.MEMBERINFO.MEMBER_NAME,
RelativeSource={RelativeSource AncestorType=ItemsControl}}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>