3 回答

TA貢獻1815條經(jīng)驗 獲得超10個贊
A HierarchicalDataTemplate是一種表達方式,“這就是您呈現(xiàn)這種類型的對象的方式,這是可以探查以找到該對象下的子節(jié)點的屬性”
因此,您需要一個返回該節(jié)點“子級”的屬性。例如(如果您不能同時使“組”和“條目”都源自同一個節(jié)點類型)
public class Group{ ....
public IList<object> Items
{
get
{
IList<object> childNodes = new List<object>();
foreach (var group in this.SubGroups)
childNodes.Add(group);
foreach (var entry in this.Entries)
childNodes.Add(entry);
return childNodes;
}
}
接下來HierarchicalDataTemplate,由于條目沒有子項,因此不需要條目。因此,需要更改XAML以使用新的Items屬性和DataTemplatefor條目:
<TreeView Name="GroupView" Grid.Row="0" Grid.Column="0" ItemsSource="{Binding}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Group}" ItemsSource="{Binding Items}">
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:Entry}" >
<TextBlock Text="{Binding Path=Name}" />
</DataTemplate>
</TreeView.Resources>
</TreeView>

TA貢獻1712條經(jīng)驗 獲得超3個贊
我認為您已經(jīng)完成了大部分工作...只需進行一點點返工,就可以輕松完成此工作...
我建議您創(chuàng)建一個基本抽象類(或您喜歡的一個接口),并為Group和Entry類繼承/實現(xiàn)它。
這樣,您可以在Group對象中公開一個屬性
public ObservableCollection<ITreeViewItem> Children { get; set; }
^至此,您可以決定是否替換子組和條目的列表,或者只是將它們附加在一起并在屬性getter中返回它們...
現(xiàn)在,您只需要使用Group或Entry對象填充Children集合,HierarchicalDataTemplate當將對象放置在TreeView中時,它將正確呈現(xiàn)。
最后要考慮的是,如果Entry始終是樹的“底層”(即沒有子級),則無需HierarchicalDataTemplate為Entry對象定義a即可DataTemplate。
希望這可以幫助 :)

TA貢獻1876條經(jīng)驗 獲得超5個贊
這是Gishu答案的替代實現(xiàn),它返回IEnumerable而不是IList,并使用yield關(guān)鍵字來簡化代碼:
public class Group
{
...
public IEnumerable<object> Items
{
get
{
foreach (var group in this.SubGroups)
yield return group;
foreach (var entry in this.Entries)
yield return entry;
}
}
}
- 3 回答
- 0 關(guān)注
- 1452 瀏覽
添加回答
舉報