我有一個要求在我們的應用程序之一實現下面列出。我有一個查詢如何在WPF中實現這一點。TreeView的對象綁定到另一個視圖
我有主要的WPF窗口,它分爲左側的樹視圖和窗體與一些文本框和組合框,右側的複選框。
我想用樹節點的標記值中存儲的對象的相應值填充右側窗體。
每當我點擊樹型視圖上的特定節點時,右側的表單字段將在其標籤值中顯示對象存儲的內容,如果我在右側表單字段中做了一些修改,最終會更新它。
任何人都可以給示例應用程序的鏈接?
我有一個要求在我們的應用程序之一實現下面列出。我有一個查詢如何在WPF中實現這一點。TreeView的對象綁定到另一個視圖
我有主要的WPF窗口,它分爲左側的樹視圖和窗體與一些文本框和組合框,右側的複選框。
我想用樹節點的標記值中存儲的對象的相應值填充右側窗體。
每當我點擊樹型視圖上的特定節點時,右側的表單字段將在其標籤值中顯示對象存儲的內容,如果我在右側表單字段中做了一些修改,最終會更新它。
任何人都可以給示例應用程序的鏈接?
你的問題涉及WPF中的一個非常基本的概念,即(Data) Binding。請從這篇文章開始。
請注意,將有趣/可編輯的對象放入屬性TreeViewItem
對於UI設計來說是一個非常糟糕的主意。 Tag
屬性很容易從代碼中訪問,但是從UI中綁定到相當困難/完整,因爲TreeView
本身只公開屬性,該屬性通常返回數據項而不是TreeViewItems
。
請這個例子玩:
<StackPanel Orientation="Horizontal">
<TreeView x:Name="twi">
<TreeViewItem Tag="one" Header="111">
<TextBlock Text="First" />
</TreeViewItem>
<TreeViewItem Tag="two" Header="222">
<TextBlock Text="Second" />
</TreeViewItem>
<TreeViewItem Tag="three" Header="333">
<TextBlock Text="Third" />
</TreeViewItem>
</TreeView>
<StackPanel Orientation="Vertical">
<TextBlock Text="The text:" />
<TextBlock Text="{Binding ElementName=twi, Path=SelectedItem}" />
<TextBlock Text="{Binding ElementName=twi, Path=SelectedItem.Tag}" />
<TextBlock Text="{Binding ElementName=twi, Path=SelectedItem.Tag.Name}" />
<TextBlock Text="{Binding ElementName=twi, Path=SelectedItem.Tag.Surname}" />
</StackPanel>
</StackPanel>
這是整個樣本,只是把它的任何地方。左邊是項目,右邊是一些標籤。當您單擊TreeView時,標籤將更新並顯示所選內容以及其Tag
屬性。當然,TAG被設置爲簡單的字符串,所以.Name和.Surname將不顯示任何內容。但是,如果將TAG設置爲某些數據對象,則會正確顯示。請注意,如果您點擊TWI,它會按照您的預期進行操作,但如果您點擊TWI的子項,它將不會 - 總而言之,它是選中的子文本!
您需要非常小心您在樹視圖中放置的內容,並且非常小心您放置標記值的位置/位置。這不是一個好方法。更典型的,你會:
public class Person
{
// properties
public string Name { .... }
public string Surname { ... }
public List<Person> Subordinates { .... }
}
<StackPanel Orientation="Horizontal">
<TreeView x:Name="twi">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Subordinates}">
<TextBlock>
<Run Text="{Binding Name}" />
<Run Text=" " />
<Run Text="{Binding Surname}" />
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<StackPanel Orientation="Vertical">
<TextBlock Text="The selected person:" />
<TextBox Text="{Binding ElementName=twi, Path=SelectedItem.Name, Mode=TwoWay}" />
<TextBox Text="{Binding ElementName=twi, Path=SelectedItem.Surname, Mode=TwoWay}" />
</StackPanel>
</StackPanel>
和當然,創建一些示例數據,並提供到TreeView作爲其的ItemsSource。 通過這種方式,TreeView將自動創建項目,應用模板,並且每次點擊時,SelectedItem都不會爲您提供TreeViewItem
s,但是 - Person
可以直接編輯。因此,在窗口的右側,簡單綁定到SelectedItem.Name
將「正常工作」,如果您將其設置爲雙向,它將直接更新Person。
聲明:我還沒有運行代碼。可能有錯誤和錯別字。代碼只是爲了展示大致的想法。
嗨Quetzalcoatl,謝謝你這麼好的樣品。將測試此並接受爲答案。 – Omkar