第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

WPF TreeView HierarchicalDataTemplate-綁定到具有多個子集合的對

WPF TreeView HierarchicalDataTemplate-綁定到具有多個子集合的對

C#
UYOU 2019-12-25 14:49:02
我試圖獲取一個TreeView綁定我的收藏集的方法,以便所有組都顯示嵌套的組,而每個組都將顯示條目。我該如何使用HierarchicalDataTemplate以便TreeView處理子組和條目集合?組顯示子組和條目:Example:Group1--Entry--EntryGroup2--Group4----Group1------Entry------Entry----Entry----Entry--Entry--EntryGroup3--Entry--Entry對象:namespace TaskManager.Domain{    public class Entry    {        public int Key { get; set; }        public string Name { get; set; }    }}namespace TaskManager.Domain{    public class Group    {        public int Key { get; set; }        public string Name { get; set; }        public IList<Group> SubGroups { get; set; }        public IList<Entry> Entries { get; set; }    }}測試數(shù)據(jù):namespace DrillDownView{    public class TestData    {        public IList<Group> Groups = new List<Group>();        public void Load()        {            Group grp1 = new Group() { Key = 1, Name = "Group 1", SubGroups = new List<Group>(), Entries = new List<Entry>() };            Group grp2 = new Group() { Key = 2, Name = "Group 2", SubGroups = new List<Group>(), Entries = new List<Entry>() };            Group grp3 = new Group() { Key = 3, Name = "Group 3", SubGroups = new List<Group>(), Entries = new List<Entry>() };            Group grp4 = new Group() { Key = 4, Name = "Group 4", SubGroups = new List<Group>(), Entries = new List<Entry>() };            //grp1            grp1.Entries.Add(new Entry() { Key=1, Name="Entry number 1" });            grp1.Entries.Add(new Entry() { Key=2, Name="Entry number 2" });            grp1.Entries.Add(new Entry() { Key=3,Name="Entry number 3" });            //grp2            grp2.Entries.Add(new Entry(){ Key=4, Name = "Entry number 4"});            grp2.Entries.Add(new Entry(){ Key=5, Name = "Entry number 5"});            grp2.Entries.Add(new Entry(){ Key=6, Name = "Entry number 6"});        }    }}
查看完整描述

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>


查看完整回答
反對 回復(fù) 2019-12-25
?
交互式愛情

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。


希望這可以幫助 :)


查看完整回答
反對 回復(fù) 2019-12-25
?
慕運維8079593

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;

        }

    }

}


查看完整回答
反對 回復(fù) 2019-12-25
  • 3 回答
  • 0 關(guān)注
  • 1452 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號