Дерево логируемых классов
Здравствуйте! Как можно вложить логируемый класс в основной что бы в 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, $"Сообщение вторичного класса."));
}
}
}