Files
FluentTerminal/FluentTerminal.App/Converters/TerminalViewModelToViewConverter.cs
Max Risuhin dbe4aad8ea Avoid memory leaks after terminal window is closed. (#516)
* - Force GC.Collect() on closing of terminal;
- Prepare MainPage, MainViewModel, TabBar, TerminalBridge for disposal.

* Request _dispatcherJobs Task cancellation ASAP on terminal closing.
2019-09-10 01:00:54 +03:00

50 lines
1.5 KiB
C#

using FluentTerminal.App.ViewModels;
using FluentTerminal.App.Views;
using System;
using System.Collections.Generic;
using Windows.UI.Xaml.Data;
namespace FluentTerminal.App.Converters
{
internal class TerminalViewModelToViewConverter : IValueConverter
{
private readonly Dictionary<TerminalViewModel, TerminalView> _viewDictionary;
public TerminalViewModelToViewConverter()
{
_viewDictionary = new Dictionary<TerminalViewModel, TerminalView>();
}
public void RemoveTerminal(TerminalViewModel viewModel)
{
if (_viewDictionary.TryGetValue(viewModel, out TerminalView terminalView))
{
viewModel.DisposalPrepare();
terminalView.DisposalPrepare();
}
_viewDictionary.Remove(viewModel);
GC.Collect();
}
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value is TerminalViewModel terminal)
{
if (_viewDictionary.TryGetValue(terminal, out TerminalView view))
{
return view;
}
var newView = new TerminalView(terminal);
_viewDictionary.Add(terminal, newView);
return newView;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
}