2017-06-12 136 views
0

在我的应用程序中,我有一个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。但是这是一件非常痛苦的事情,所以我觉得应该有一个更简单的方法!

+1

听起来像是你应该使用一个DataTemplate来显示您所选的成员。但是,您不应该在视图模型中使用依赖项属性。 –

+0

虚拟机中的DP不是那种违反MVVM的大问题。它并不是真的必要,因为INPC属性是优越的(它们是线程安全的,因为您可以从非ui线程更新它们并自动进行编组更改)。你应该抓住一份框架指南的副本,然后... – Will

+0

我只在2个月的时间里进行了编程,所以我现在正处在一个陡峭的学习曲线中!如果他们不应该在ViewModel中,他们应该在哪里? – GDiff94

回答

1

你就不能绑定TextBlock的直接来源性质?:

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

我之前尝试过,但只要将ItemsControl中的内容移动到ItemsControl中,它就不再可见了? – GDiff94

+0

ItemsControl的ItemsSource属性设置为什么? – mm8

+0

它被设置为我的SelectedMember依赖项属性 – GDiff94