0

階層的な「感触」を備えたシンプルなロギングシステムを作成しようとしています。このスクリーンショットが私のオブジェクトを明確に説明していることを願っています。

ここに画像の説明を入力してください

ご覧のとおり、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が複数回設定されています」というエラーメッセージが表示されます。

4

1 に答える 1

1

バインディング式へのパスを指定する必要があります。

于 2012-12-08T09:17:47.403 に答える