WPFでツリービューを使用しています
ツリービューの 2 つのレベルを設定するために使用している 2 つのクラスがあります。
最初の質問は、1 つのクエリでこれを実行できるか、または以下で達成したよりも優れているかということです。
h.ItemId
主な質問は、および の他の列を含めてViewDocItems
、ツリービューで階層を実現し たいということです。
現在、Title
fromDocHistory
クラスはツリーのルート レベルです。
そしてBaseNumber
fromBaseHistory
はセカンドレベル。
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