階層的な「感触」を備えたシンプルなロギングシステムを作成しようとしています。このスクリーンショットが私のオブジェクトを明確に説明していることを願っています。
ご覧のとおり、4つのフィールドのみを公開するLogDetailsタイプの新しいオブジェクトを作成します。
public string Message;
public LogStatus Status;
public string ErrorDetails;
public enum LogStatus
{
Complete, Failed, Error, FatalError, Progress, Started
}
Titleプロパティ(文字列)とLogDetailsプロパティを持つ別のクラスがあります。
XAMLにバインドすると、ツリービューに次のように表示されます。
ご覧のとおり、ルートは正常で、期待/望ましい(赤)ですが、各サブカテゴリは分類されていません。レベルをバイパスして、ErrorDetails、Message、およびStatusに直接移動できるようにしたいと思います。だから、私はこれを作成したいと思います(Wordでモックアップされていますが、うまくいけばあなたはアイデアを得るでしょう):
これは私のxamlです:
<Grid>
<TreeView ItemsSource="{Binding}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding LogDetailsList}" >
<TextBlock Text="{Binding Title}" />
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
そして私のMainWindowコードは背後にあります
public partial class MainWindow : Window
{
static public ObservableCollection<Log> logList;
public MainWindow(List<Log> logs)
{
InitializeComponent();
logList = new ObservableCollection<Log>();
foreach (var item in logs)
{
logList.Add(item);
}
this.DataContext = logList;
}
}
誰かが私を正しい方向に向けてくれますか、少なくとも私のデザインに欠陥があるかどうか教えてください。
編集
別のテキストブロックまたはItemTEmplateを追加しようとすると、「プロパティItemTemplateが複数回設定されています」または「プロパティVisualTreeが複数回設定されています」というエラーメッセージが表示されます。