Дерево логируемых классов


Здравствуйте! Как можно вложить логируемый класс в основной что бы в StockSharp.Xaml.Monitor он выводился внутри дерева основного? Устанавливал значение Parent и IsRoot разными способами но никаких изменений нет.

<Window x:Class="WpfApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        xmlns:xaml="http://schemas.stocksharp.com/xaml"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="800">
    <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
        <xaml:Monitor Name="Monitor"/>
        <Button Content="Start" Click="Button_Click" Grid.Row="1" Margin="3"/>
    </Grid>
</Window>
using System;
using System.Windows;
using StockSharp.Logging;
using StockSharp.Xaml;

namespace WpfApp2
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : ILogSource
    {
        public readonly LogManager LogManager;
        public Guid Id { get; }
        public new ILogSource Parent { get; set; }
        public LogLevels LogLevel { get; set; }
        public DateTimeOffset CurrentTime => DateTimeOffset.Now;
        public bool IsRoot { get; }

        public event Action<LogMessage> Log;

        public MainWindow()
        {
            InitializeComponent();
            Name = "MainWindow";
            LogManager = new LogManager();
            LogLevel = LogLevels.Info;
            LogManager.Sources.Add(this);
            LogManager.Listeners.Add(new GuiLogListener(Monitor));
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Log?.Invoke(new LogMessage(this, CurrentTime, LogLevel, "Сообщение главного класса."));
            var testSourceWindow = new TestClass()
            {
                Parent = this
            };
            LogManager.Sources.Add(testSourceWindow);
            testSourceWindow.Test();
        }

        public void Dispose()
        {
            throw new NotImplementedException();
        }

    }


    class TestClass : ILogSource
    {
        private ILogSource _parent;

        public void Dispose()
        {
            throw new NotImplementedException();
        }

        public Guid Id { get; }
        public string Name { get; set; } = "TestClass";
        public ILogSource Parent
        {
            get => _parent;
            set
            {
                _parent = value;
                LogLevel = value.LogLevel;
            }
        }

        public LogLevels LogLevel { get; set; }
        public DateTimeOffset CurrentTime => DateTimeOffset.Now;
        public bool IsRoot { get; }
        public event Action<LogMessage> Log;

        public void Test()
        {
            Log?.Invoke(new LogMessage(this, CurrentTime, LogLevel, $"Сообщение вторичного класса."));
        }
    }
}




Спасибо:


Support

Фотография
Дата: 20.06.2019
Ответить


Добавлять дочерние источники не нужно:

LogManager.Sources.Add(testSourceWindow);

Как только ваш источник пошлёт первое сообщение он появится в дереве.

Спасибо:

Константин

Фотография
Дата: 20.06.2019
Ответить


Support: Добавлять дочерние источники не нужно:

LogManager.Sources.Add(testSourceWindow);

> 
> Как только ваш источник пошлёт первое сообщение он появится в дереве.

Если дочерний источник не добавлять то от него вывода нет вообще.
Спасибо:

Support

Фотография
Дата: 21.06.2019
Ответить


Дополнительно требуется отнеследовать от интерфейса ILogReceiver. Родительские через метод AddLog получает сообщения от дочерних элементов.

Спасибо:

Константин

Фотография
Дата: 21.06.2019
Ответить


Support: Дополнительно требуется отнеследовать от интерфейса ILogReceiver. Родительские через метод AddLog получает сообщения от дочерних элементов.

Я не понимаю какая должна быть реализация метода AddLog что бы дочерние элементы появились в дереве. Каким образом нужно передавать LogMessage родителю?

Спасибо:

Support

Фотография
Дата: 21.06.2019
Ответить


Спасибо: Константин


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy