WPF MVVM TextBlock绑定到类中的字符串DependencyProperty
问题描述:
在我的应用程序中,我有一个DataGrid
中的成员列表,并且当选择一个成员时,会员资料将填充其详细信息。会员资料由10+ TextBlocks
组成,每个文本值绑定到string
类型的个人DependencyProperty (DP)
。WPF MVVM TextBlock绑定到类中的字符串DependencyProperty
生成的成员列表是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都绑定到SelectedMember
并且将文本绑定到SelectedMember
内的属性上呢?而不是让10+字符串DependencyProperties
和从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>
听起来像是你应该使用一个DataTemplate来显示您所选的成员。但是,您不应该在视图模型中使用依赖项属性。 –
虚拟机中的DP不是那种违反MVVM的大问题。它并不是真的必要,因为INPC属性是优越的(它们是线程安全的,因为您可以从非ui线程更新它们并自动进行编组更改)。你应该抓住一份框架指南的副本,然后... – Will
我只在2个月的时间里进行了编程,所以我现在正处在一个陡峭的学习曲线中!如果他们不应该在ViewModel中,他们应该在哪里? – GDiff94