我有一個遵循復合設計模式的物件。我想使用樹視圖在 WPF 中顯示此物件,但無法正確系結資料。我有兩個類:Leaf,沒有任何子類的簡單類,以及 Box,具有子元素的復合類,它們可以是 Box 類的 Leaf 類。我還有一個叫做 ITree 的通用介面
界面
public interface ITree
{
string Name { get; }
string Property1 { get; }
string Property2 { get; }
}
簡單類
public class Leaf : ITree
{
string ITree.Name { get { return _name; } }
string ITree.Property1 { get { return property1; } }
string ITree.Property2 { get { return property2; } }
}
復合類
public class Box : ITree
{
string ITree.Name { get { return _name; } }
string ITree.Property1 { get { return property1; } }
string ITree.Property2 { get { return property2; } }
List<ITree> Children = new List<ITree>();
}
xml檔案
List<ITree> ListToBind = new List<ITree>();
ITree finalObject = PopulateCompositeObjeectWithData();
ListToBind.Add(finalObject);
xml
<TreeView ItemsSource="{Binding ElementName=Window, Path= ListToBind}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
我試圖實作的樹視圖:
Box - Name
|-Leaf - Name
|-Leaf - Name
|-Box - Name
| |-Leaf - Name
| |-Leaf - Name
任何建議或代碼示例將不勝感激
謝謝
uj5u.com熱心網友回復:
首先,Children必須是公共財產才能系結到它:
public class Box : ITree
{
string ITree.Name { get { return _name; } }
string ITree.Property1 { get { return property1; } }
string ITree.Property2 { get { return property2; } }
public List<ITree> Children { get; } = new List<ITree>();
}
其次,您應該使用如下括號系結到顯式實作的介面成員:
<TreeView ItemsSource="{Binding ElementName=Window, Path= ListToBind}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding (local:ITree.Name)}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/349816.html
