WPF MVVM TextBlock绑定到类DependencyProperty中的字符串

时间:2017-06-12 15:04:52

标签: c# wpf mvvm binding dependency-properties

在我的应用程序中,我有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。但这样做真的很痛苦,所以我觉得应该有一个更简单的方法!

1 个答案:

答案 0 :(得分:1)

您不能直接将TextBlock绑定到源属性吗?:

<ItemsControl ...>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding DataContext.SelectedMember.MEMBERINFO.MEMBER_NAME, 
                        RelativeSource={RelativeSource AncestorType=ItemsControl}}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>