Кнопка на моей странице WPF не обновляется, пока я не открою страницу повторноC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Кнопка на моей странице WPF не обновляется, пока я не открою страницу повторно

Сообщение Anonymous »

У меня есть страница в моем приложении WPF. Мне нужна кнопка, которая может быть активной и неактивной. На самом деле он работает, но когда он становится активным, я не вижу этого на экране. Если я открою другую страницу, а затем снова открою свою, она станет активной.
Код UserControl: Код ViewModel:

Код: Выделить всё

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));
}
}
}

Я вставил точку останова в строку IsButtonEnabled, но она работает нормально. Всякий раз, когда я хочу изменить активность кнопки, точка останова срабатывает и значение этой переменной bool правильное.

Подробнее здесь: https://stackoverflow.com/questions/790 ... n-the-page
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»