namespace VideoBrowser.Controls.CefSharpBrowser.ViewModels { using System; using System.ComponentModel; using VideoBrowser.Controls.CefSharpBrowser.Views; using VideoBrowser.Core; using VideoBrowser.Extensions; using VideoBrowser.Helpers; /// /// Defines the . /// public class WebBrowserHeaderedItemViewModel : TabItem { #region Fields private VideoBrowserViewModel _videoBrowserViewModel; #endregion Fields #region Constructors /// /// Initializes a new instance of the class. /// /// The globalBrowserData. /// The cefWindowData. /// The downloadAction. internal WebBrowserHeaderedItemViewModel(GlobalBrowserData globalBrowserData, CefWindowData cefWindowData, Action downloadAction) { this.VideoBrowserViewModel = new VideoBrowserViewModel(globalBrowserData, cefWindowData) { DownloadAction = downloadAction }; this.VideoBrowserViewModel.PropertyChanged += this.OnVideoBrowserViewModel_PropertyChanged; this.Title = this.VideoBrowserViewModel.Header; UIThreadHelper.Invoke(() => { this.VideoBrowserView = new VideoBrowserView { DataContext = this.VideoBrowserViewModel }; this.Content = this.VideoBrowserView; }); } #endregion Constructors #region Properties /// /// Gets the VideoBrowserView. /// public VideoBrowserView VideoBrowserView { get; private set; } /// /// Gets the VideoBrowserViewModel. /// public VideoBrowserViewModel VideoBrowserViewModel { get => _videoBrowserViewModel; private set => this.Set(this.OnPropertyChanged, ref _videoBrowserViewModel, value); } #endregion Properties #region Methods /// /// The Dispose. /// /// The disposing. protected override void Dispose(bool disposing) { base.Dispose(disposing); if (this.VideoBrowserViewModel == null) { return; } this.VideoBrowserViewModel.PropertyChanged -= this.OnVideoBrowserViewModel_PropertyChanged; this.VideoBrowserViewModel.Dispose(); this.VideoBrowserViewModel = null; this.VideoBrowserView.DataContext = null; this.VideoBrowserView = null; } /// /// The OnVideoBrowserViewModel_PropertyChanged. /// /// The sender. /// The e. private void OnVideoBrowserViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.IsMatch(nameof(this.VideoBrowserViewModel.Header))) { this.Title = this.VideoBrowserViewModel.Header; } } #endregion Methods } }