Код UserControl:
Код: Выделить всё
Код: Выделить всё
using MediaAuthentication.Models;
using GalaSoft.MvvmLight.Command;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using MediaAuthentication.Business.Services.Logging;
using MediaAuthentication.Business.Services.Metadata;
namespace MediaAuthentication.ViewModels
{
public class LandingFooterViewModel
{
private ILoggerService _loggerService;
private IVideoMetadataService _videoMetadataService;
private MetaDataFooterViewModel _metaFooterViewModel;
public int markBeginning = -1;
public int markEnd = -1;
private bool _isButtonEnabled;
public bool IsButtonEnabled
{
get => _isButtonEnabled;
set
{
if (_isButtonEnabled != value)
{
_isButtonEnabled = value;
OnPropertyChanged(nameof(IsButtonEnabled));
(ButtonCommand as RelayCommand)?.RaiseCanExecuteChanged();
}
}
}
// ICommand Property
public ICommand ButtonCommand { get; }
public LandingFooterViewModel(ILoggerService loggerService, IVideoMetadataService videoMetadataService, MetaDataFooterViewModel metaFooterViewModel)
{
_loggerService = loggerService;
_videoMetadataService = videoMetadataService;
_metaFooterViewModel = metaFooterViewModel;
IsButtonEnabled = false;
ButtonCommand = new RelayCommand(OnButtonClicked, () => IsButtonEnabled);
}
private void OnButtonClicked()
{
Storage.firstFrameIndex = markBeginning;
Storage.lastFrameIndex = markEnd;
if (Storage.media == null || string.IsNullOrEmpty(Storage.path))
{
_loggerService.LogWarning("No media file loaded. Please upload a file first.");
return;
}
//IsLoading = true;
try
{
if (Storage.media.StreamList != null)
{
foreach (var stream in Storage.media.StreamList)
{
stream.FrameList.Clear();
}
Storage.media.StreamList.Clear();
}
_videoMetadataService.ExtractMetadata(Storage.media);
_metaFooterViewModel.UpdateMetadata(Storage.media);
_loggerService.LogInfo("Metadata extraction completed successfully.");
_metaFooterViewModel.UpdateMetadata(Storage.media);
/*
List frameTypes = new List();
foreach (Frame frame in media.StreamList[0].FrameList)
{
frameTypes.Add(frame.Metadata[FrameMetadataKey.FrameType]);
} */
}
catch (Exception ex)
{
_loggerService.LogError($"Error extracting metadata: {ex.Message}");
}
finally
{
// IsLoading = false;
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... n-the-page