Skip to content

Commit 3761551

Browse files
committed
remember previous log filter condition
1 parent 7b2ff3d commit 3761551

7 files changed

+156
-33
lines changed

WEventViewer.sln

-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ Global
6565
{4A68C488-E8DA-4D4E-A299-CC0C78EC5590}.Release|x86.ActiveCfg = Release|Any CPU
6666
{4A68C488-E8DA-4D4E-A299-CC0C78EC5590}.Release|x86.Build.0 = Release|Any CPU
6767
{61D89AD6-426B-4A48-998D-413309FE3A4D}.Debug|Any CPU.ActiveCfg = Debug|x64
68-
{61D89AD6-426B-4A48-998D-413309FE3A4D}.Debug|Any CPU.Build.0 = Debug|x64
6968
{61D89AD6-426B-4A48-998D-413309FE3A4D}.Debug|ARM64.ActiveCfg = Debug|ARM64
7069
{61D89AD6-426B-4A48-998D-413309FE3A4D}.Debug|ARM64.Build.0 = Debug|ARM64
7170
{61D89AD6-426B-4A48-998D-413309FE3A4D}.Debug|x64.ActiveCfg = Debug|x64

src/WEventViewer/App.axaml.cs

+14-5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Avalonia.Controls.ApplicationLifetimes;
33
using Avalonia.Markup.Xaml;
44
using Microsoft.Extensions.DependencyInjection;
5+
using System.Reflection.Metadata.Ecma335;
56
using WEventViewer.Model;
67
using WEventViewer.ViewModel;
78

@@ -18,10 +19,18 @@ public override void OnFrameworkInitializationCompleted()
1819
{
1920
var collection = new ServiceCollection();
2021
collection.AddSingleton<EventLogRepository>();
21-
collection.AddSingleton<MainWindowViewModel>(provider => new MainWindowViewModel(provider.GetRequiredService<EventLogRepository>()));
22-
collection.AddTransient<ErrorWindow>();
22+
collection.AddSingleton<IViewModelFactory, ViewModelFactoryServiceProvider>(provider => new ViewModelFactoryServiceProvider(provider));
23+
collection.AddSingleton<MainWindowViewModel>();
24+
collection.AddSingleton<OpenLogWindowViewModel>();
25+
collection.AddSingleton<MainWindow>(provider =>
26+
{
27+
return new MainWindow(provider.GetRequiredService<IViewModelFactory>())
28+
{
29+
DataContext = provider.GetRequiredService<MainWindowViewModel>()
30+
};
31+
});
2332
collection.AddTransient<ErrorWindowViewModel>();
24-
collection.AddTransient<OpenLogWindowViewModel>();
33+
collection.AddTransient<ErrorWindow>();
2534
collection.AddTransient<OpenLogWindow>();
2635
collection.AddTransient<ProviderNameWindowViewModel>();
2736
collection.AddTransient<LogNameViewModel>();
@@ -30,11 +39,11 @@ public override void OnFrameworkInitializationCompleted()
3039
var vm = serviceProvider.GetRequiredService<MainWindowViewModel>();
3140
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
3241
{
33-
desktop.MainWindow = new MainWindow(serviceProvider) { DataContext = vm };
42+
desktop.MainWindow = serviceProvider.GetRequiredService<MainWindow>();
3443
}
3544
else if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform)
3645
{
37-
singleViewPlatform.MainView = new MainWindow(serviceProvider) { DataContext = vm }; ;
46+
singleViewPlatform.MainView = serviceProvider.GetRequiredService<MainWindow>();
3847
}
3948

4049
base.OnFrameworkInitializationCompleted();

src/WEventViewer/MainWindow.axaml.cs

+24-21
Original file line numberDiff line numberDiff line change
@@ -13,32 +13,35 @@
1313
namespace WEventViewer;
1414

1515
internal record class OpenErrorLogWindow(string message);
16-
public partial class MainWindow : Window
16+
internal partial class MainWindow : Window
1717
{
1818
DiagnosticListener _DS = new DiagnosticListener(nameof(MainWindow));
19-
IServiceProvider? serviceProvider;
19+
IViewModelFactory? _viewModelFactory;
2020
public MainWindow() : this(null) { }
21-
public MainWindow(IServiceProvider? serviceProvider)
21+
public MainWindow(IViewModelFactory? viewModelFactory)
2222
{
23-
DataContext = serviceProvider != null ? serviceProvider.GetService<MainWindowViewModel>() : new MainWindowViewModel();
24-
this.serviceProvider = serviceProvider;
23+
DataContext = viewModelFactory != null ? viewModelFactory.GetMainWindowViewModel() : new MainWindowViewModel(new EventLogRepository(), new StubViewModelFactory());
24+
this._viewModelFactory = viewModelFactory;
2525
InitializeComponent();
2626
WeakReferenceMessenger.Default.Register<MainWindow, OpenLogRequest>(this, async (recpient, req) =>
2727
{
28-
var vm = new OpenLogWindowViewModel();
29-
var dlg = new OpenLogWindow()
28+
var vm = _viewModelFactory?.GetOpenLogWindowViewMode();
29+
if (vm != null)
3030
{
31-
DataContext = vm
32-
};
33-
var ret = await dlg.ShowDialog<bool>(this);
34-
if(ret && DataContext is MainWindowViewModel mwvm)
35-
{
36-
WeakReferenceMessenger.Default.Send<LoadLogMessage>(new(vm.LogName, vm.CurrentSelected.PathType, vm.QueryString));
31+
var dlg = new OpenLogWindow()
32+
{
33+
DataContext = vm
34+
};
35+
var ret = await dlg.ShowDialog<bool>(this);
36+
if (ret && DataContext is MainWindowViewModel mwvm)
37+
{
38+
WeakReferenceMessenger.Default.Send<LoadLogMessage>(new(vm.LogName, vm.CurrentSelected.PathType, vm.QueryString));
39+
}
3740
}
3841
});
3942
WeakReferenceMessenger.Default.Register<MainWindow, OpenErrorLogWindow>(this, async (mw, msg) =>
4043
{
41-
var vm = new ErrorWindowViewModel(msg.message);
44+
var vm = _viewModelFactory?.GetErrorViewWindowModel(msg.message);
4245
var dlg = new ErrorWindow() { DataContext = vm };
4346
await dlg.ShowDialog(mw);
4447
});
@@ -60,7 +63,7 @@ private void DataGrid_DoubleTapped_1(object? sender, Avalonia.Input.TappedEventA
6063
{
6164
if (dataGrid.SelectedItem is LogRecord record)
6265
{
63-
var vm = new DetailedLogViewModel(record);
66+
var vm = _viewModelFactory?.GetDetailedLogViewModel(record);
6467
var w = new DetailedLogMessageWIndow()
6568
{
6669
DataContext = vm,
@@ -73,9 +76,9 @@ private void DataGrid_DoubleTapped_1(object? sender, Avalonia.Input.TappedEventA
7376
private void PrintProviderClick(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
7477
{
7578
_DS.Write("OnPrintProviderClick", new { e.Source, t = e.GetType() });
76-
if (serviceProvider != null)
79+
if (_viewModelFactory != null)
7780
{
78-
var vm = serviceProvider.GetService<ProviderNameWindowViewModel>();
81+
var vm = _viewModelFactory.GetProviderNameWindowViewModel();
7982
var w = new ProviderNamesWindow() { DataContext = vm };
8083
w.Show();
8184
}
@@ -84,19 +87,19 @@ private void PrintProviderClick(object? sender, Avalonia.Interactivity.RoutedEve
8487

8588
private void PrintLogNamesClick(object? sender, RoutedEventArgs e)
8689
{
87-
if (serviceProvider != null)
90+
if (_viewModelFactory != null)
8891
{
89-
var vm = serviceProvider.GetService<LogNameViewModel>();
92+
var vm = _viewModelFactory.GetLogNameViewModel();
9093
var w = new LogNameWindow() { DataContext = vm };
9194
w.Show();
9295
}
9396
}
9497

9598
private void AboutClick(object? sender, RoutedEventArgs e)
9699
{
97-
if (serviceProvider != null)
100+
if (_viewModelFactory != null)
98101
{
99-
var vm = serviceProvider.GetService<AboutViewModel>();
102+
var vm = _viewModelFactory.GetAboutViewModel();
100103
var w = new AboutWindow() { DataContext = vm };
101104
w.Show(this);
102105
}

src/WEventViewer/ViewModel/DetailedLogViewModel.cs

+8-3
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ public DetailedLogViewModel() : this(null)
3131
{
3232
}
3333
LogRecord? logRecord;
34-
35-
public DetailedLogViewModel(LogRecord? logRecord)
34+
public void Initialize(LogRecord? logRecord)
3635
{
3736
this.logRecord = logRecord;
3837
if (logRecord != null && !string.IsNullOrEmpty(logRecord.XmlString))
@@ -48,7 +47,7 @@ public DetailedLogViewModel(LogRecord? logRecord)
4847
{
4948
_FormattedXmlString = string.Empty;
5049
}
51-
if(logRecord != null)
50+
if (logRecord != null)
5251
{
5352
Items = new DetailedLogRecordValue[]
5453
{
@@ -68,6 +67,12 @@ public DetailedLogViewModel(LogRecord? logRecord)
6867
};
6968
}
7069
}
70+
71+
public DetailedLogViewModel(LogRecord? logRecord)
72+
{
73+
_FormattedXmlString = string.Empty;
74+
Initialize(logRecord);
75+
}
7176
public IEnumerable<DetailedLogRecordValue> Items { get; private set; } = Array.Empty<DetailedLogRecordValue>();
7277
string _FormattedXmlString;
7378
public string XmlString => _FormattedXmlString;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Diagnostics.Eventing.Reader;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using WEventViewer.Model;
8+
9+
namespace WEventViewer.ViewModel
10+
{
11+
internal interface IViewModelFactory
12+
{
13+
MainWindowViewModel GetMainWindowViewModel();
14+
OpenLogWindowViewModel GetOpenLogWindowViewMode();
15+
ErrorWindowViewModel GetErrorViewWindowModel(string message);
16+
LogNameViewModel GetLogNameViewModel();
17+
DetailedLogViewModel GetDetailedLogViewModel(LogRecord record);
18+
AboutViewModel GetAboutViewModel();
19+
ProviderNameWindowViewModel GetProviderNameWindowViewModel();
20+
}
21+
class StubViewModelFactory : IViewModelFactory
22+
{
23+
public MainWindowViewModel GetMainWindowViewModel() => new MainWindowViewModel();
24+
public AboutViewModel GetAboutViewModel()
25+
{
26+
return new AboutViewModel();
27+
}
28+
29+
public DetailedLogViewModel GetDetailedLogViewModel(LogRecord record)
30+
{
31+
return new DetailedLogViewModel(record);
32+
}
33+
34+
public ErrorWindowViewModel GetErrorViewWindowModel(string message)
35+
{
36+
return new ErrorWindowViewModel();
37+
}
38+
39+
public LogNameViewModel GetLogNameViewModel()
40+
{
41+
return new LogNameViewModel();
42+
}
43+
44+
public OpenLogWindowViewModel GetOpenLogWindowViewMode()
45+
{
46+
throw new NotImplementedException();
47+
}
48+
49+
public ProviderNameWindowViewModel GetProviderNameWindowViewModel()
50+
{
51+
throw new NotImplementedException();
52+
}
53+
}
54+
}

src/WEventViewer/ViewModel/MainWindowViewModel.cs

+5-3
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,16 @@ record class OpenDetailedLogMessage();
3737
internal class MainWindowViewModel : ObservableRecipient
3838
{
3939
EventLogRepository _EventLogRepository;
40+
IViewModelFactory? _ViewModelFactory;
4041
Task LoadTask;
41-
public MainWindowViewModel() : this(new EventLogRepository()) { }
4242
CancellationTokenSource LoadCancellationToken = new CancellationTokenSource();
4343
IDisposable IsLoadingSubscription;
44-
public MainWindowViewModel(EventLogRepository eventLogRepository)
44+
public MainWindowViewModel() : this(null, null) { }
45+
public MainWindowViewModel(EventLogRepository? eventLogRepository, IViewModelFactory? viewModelFactory)
4546
{
4647
LoadTask = Task.CompletedTask;
47-
_EventLogRepository = eventLogRepository;
48+
_EventLogRepository = eventLogRepository != null ? eventLogRepository : new EventLogRepository();
49+
_ViewModelFactory = viewModelFactory;
4850
_Progress = new Progress<long>(l =>
4951
{
5052
Dispatcher.UIThread.Invoke(() =>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using Microsoft.Extensions.DependencyInjection;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using WEventViewer.Model;
8+
9+
namespace WEventViewer.ViewModel
10+
{
11+
internal class ViewModelFactoryServiceProvider(IServiceProvider provider) : IViewModelFactory
12+
{
13+
public MainWindowViewModel GetMainWindowViewModel()
14+
{
15+
return provider.GetRequiredService<MainWindowViewModel>();
16+
}
17+
public AboutViewModel GetAboutViewModel()
18+
{
19+
return provider.GetRequiredService<AboutViewModel>();
20+
}
21+
22+
public DetailedLogViewModel GetDetailedLogViewModel(LogRecord record)
23+
{
24+
var vm = provider.GetRequiredService<DetailedLogViewModel>();
25+
vm.Initialize(record);
26+
return vm;
27+
}
28+
29+
public ErrorWindowViewModel GetErrorViewWindowModel(string message)
30+
{
31+
var vm = provider.GetRequiredService<ErrorWindowViewModel>();
32+
vm.Message = message;
33+
return vm;
34+
}
35+
36+
public LogNameViewModel GetLogNameViewModel()
37+
{
38+
return provider.GetRequiredService<LogNameViewModel>();
39+
}
40+
41+
public OpenLogWindowViewModel GetOpenLogWindowViewMode()
42+
{
43+
return provider.GetRequiredService<OpenLogWindowViewModel>();
44+
}
45+
46+
public ProviderNameWindowViewModel GetProviderNameWindowViewModel()
47+
{
48+
return provider.GetRequiredService<ProviderNameWindowViewModel>();
49+
}
50+
}
51+
}

0 commit comments

Comments
 (0)