2

WPFでツリービューを使用しています

ツリービューの 2 つのレベルを設定するために使用している 2 つのクラスがあります。

最初の質問は、1 つのクエリでこれを実行できるか、または以下で達成したよりも優れているかということです。

h.ItemId主な質問は、および の他の列を含めてViewDocItems、ツリービューで階層を実現し たいということです。

現在、TitlefromDocHistoryクラスはツリーのルート レベルです。

そしてBaseNumberfromBaseHistoryはセカンドレベル。

        public class DocHistory
        {
            private ObservableCollection<BaseHistory> mBaseHis = new ObservableCollection<BaseHistory>();

            public Guid Id { get; set; }
            public Guid ClassId { get; set; }
            public string Title { get; set; }


            public ObservableCollection<BaseHistory> BaseHis { get { return mBaseline; } }
        }



        public class BaseHistory
        {
           public Guid BaseId { get; set; }
           public string BaseName { get; set; }
           public int BaseNumber { get; set; }
           public bool BaseFinal { get; set; }
        }



                   //this guid is only for testing
                    mGuid = new Guid("0497F3DA-AE3E-40C7-AF91-9B26EEE2A437");

                    var query = (from d in mContext.Docs
                                 orderby d.Title ascending
                                 join b in mContext.Base on d.DocId equals b.DocId
                                 join h in mContext.ViewDocItems on b.BaseId equals h.BaseId
                                 where h.ItemId == mGuid
                                 select d).Distinct();
                    List<Database.Doc> DocList = query.ToList();

                    foreach (Database.Doc result in DocList)
                    {
                        DocHistory newHistory = new DocuHistory() { Id = result.DocId, Title = result.Title, ClassId = result.ClassId };
                        mHistory.Add(newHistory);

                        var documents = from d in result.Base
                                        orderby d.LineNumber

                                    select new BaseHistory()
                                    {
                                        BaseId = d.BaseId,
                                        Name = d.Title,
                                        BaseFinal = d.Final.Value,
                                        LineNumber = d.LineNumber.Value

                                    };

                        documents.ToList().ForEach(d => newHistory.BaseHis.Add(d));

                    }

ここに私がバインドしているプロパティがあります

    private ObservableCollection<DocHistory> mHistory = new ObservableCollection<DocHistory>();
    public ObservableCollection<DocHistory> DocsHistory
            {
                get
                {
                    return mHistory;
                }
            }

私はItemsSource="{Binding Path=DocsHistory}"treeViewに使用しています

そして、Hierarchial DataTemplateはバインドされていますBaseHis

4

1 に答える 1