WPF MVVM TextBlock 绑定到 class DependencyProperty 中的字符串
WPF MVVM TextBlock binding to string in a class DependencyProperty
In my application I have a list of members in a DataGrid
, and when a member is selected a member profile is populated with their details.成员个人资料由 10+ TextBlocks
组成,每个文本值绑定到 string
.
类型的个人 DependencyProperty (DP)
生成的成员列表为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
中获得了我需要的所有信息。因此,与其拥有 10 多个字符串 DependencyProperties
并从 SelectedMember
分配它们的值,有没有一种方法可以让容器内的所有 TextBlocks 的 ItemsSource 绑定到 SelectedMember
并分配绑定文本SelectedMember
内的属性?因此,就像您使用 DataGrid 一样?我知道 ListView 和 ListBox 也有 ItemsSource 但我的成员资料不是列表,我只想要一个简单的容器,它没有 DataGrids 和 ListViews/Box 那样的任何固有功能。
注意:在另一个有类似问题的应用程序中,我设法操作 DataGrid 以删除所有它固有的 DataGrid 功能,并在单个单元格中显示多个文本块,以便我可以使用它的 ItemsSource。但这做起来很痛苦,所以我再次觉得应该有更简单的方法!
您不能直接将 TextBlock
绑定到源属性吗?:
<ItemsControl ...>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding DataContext.SelectedMember.MEMBERINFO.MEMBER_NAME,
RelativeSource={RelativeSource AncestorType=ItemsControl}}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
In my application I have a list of members in a DataGrid
, and when a member is selected a member profile is populated with their details.成员个人资料由 10+ TextBlocks
组成,每个文本值绑定到 string
.
DependencyProperty (DP)
生成的成员列表为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
中获得了我需要的所有信息。因此,与其拥有 10 多个字符串 DependencyProperties
并从 SelectedMember
分配它们的值,有没有一种方法可以让容器内的所有 TextBlocks 的 ItemsSource 绑定到 SelectedMember
并分配绑定文本SelectedMember
内的属性?因此,就像您使用 DataGrid 一样?我知道 ListView 和 ListBox 也有 ItemsSource 但我的成员资料不是列表,我只想要一个简单的容器,它没有 DataGrids 和 ListViews/Box 那样的任何固有功能。
注意:在另一个有类似问题的应用程序中,我设法操作 DataGrid 以删除所有它固有的 DataGrid 功能,并在单个单元格中显示多个文本块,以便我可以使用它的 ItemsSource。但这做起来很痛苦,所以我再次觉得应该有更简单的方法!
您不能直接将 TextBlock
绑定到源属性吗?:
<ItemsControl ...>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding DataContext.SelectedMember.MEMBERINFO.MEMBER_NAME,
RelativeSource={RelativeSource AncestorType=ItemsControl}}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>