2017-06-12 78 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