MVVMLight C# RaisePropertyChanged не работает - PullRequest
0 голосов
/ 12 марта 2020

Мне помогал StackOverflow, чтобы помочь мне изменить содержимое на кнопке, однако я не вижу изменений, пока мой рабочий класс с именем '' 'FF C .StartCollection ()' '' не будет завершен. Таким образом, пользователь не получает никакого статуса того, что происходит. Я хочу, чтобы кнопка сменилась с включенной на отключенную, а содержимое должно было сказать «работает», а затем «сделано».

The BtnEnabled = true; BtnContent = "Готово"; Кажется, только изменить, когда команда кнопки завершена. Никаких изменений в значениях до запуска функции FF C .StartCollection ().

Мой код (я называю рабочий класс), который выполняет все тяжелые работы в течение примерно 2 минут, когда '' 'FF C .StartCollection (); '' 'вызывается. Но я вижу, что после нажатия кнопки ни одно из изменений кнопки не вступает в силу. Таким образом, пользователь не видит кнопку go в отключенном состоянии, а содержимое меняется на «рабочий ..»

Я прошел по коду. Я вижу, как RaisePropertyChanged фактически пропускает сообщение, которое я хочу. Однако GUI никогда не показывает это. В Windows форме (правильной или неправильной) я могу сделать «.Refre sh ()», чтобы обновить GUI.

using GalaSoft.MvvmLight.Command;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Data;
using System.Threading;

/// <summary>
/// just so i remember the TextBox will not work in this function. ListBox work for 
/// updating!
/// </summary>

namespace WpfFileFolderTool.ViewModel
{
    /// <summary>
    /// This class contains properties that the main View can data bind to.
    /// <para>
    /// Use the <strong>mvvminpc</strong> snippet to add bindable properties to this ViewModel.
    /// </para>
    /// <para>
    /// You can also use Blend to data bind with the tool's support.
    /// </para>
    /// <para>
    /// See http://www.galasoft.ch/mvvm
    /// </para>
    /// </summary>
    public class MainWindowViewModel : ViewModelBase
    {
        /// <summary>
        /// Initializes a new instance of the MainViewModel class.
        /// </summary>
        private BindingList<string> _fileCollectionItems;//can't be update but via property below
        public ObservableCollection<string> FileCollection { get; set; }
        public RelayCommand AddListCommand { get; set; }
        public RelayCommand BeginCollectionCommand { get; set; }
        public BindingList<string> FileCollectionItems 
        { 
            get => _fileCollectionItems;
            set
            {
                _fileCollectionItems = value;
                RaisePropertyChanged(nameof(FileCollectionItems));
            }
        }
        bool m_Enabled = true;
        public bool BtnEnabled
        {
            get { return m_Enabled; }
            set
            {
                m_Enabled = value;
                //RaisePropertyChanged("BtnEnabled");
                RaisePropertyChanged(()=>BtnEnabled);
            }
        }
        string m_String = "Start";
        public string BtnContent
        {
            get { return m_String; }
            set
            {
                m_String = value;
                //RaisePropertyChanged("BtnContent");
                RaisePropertyChanged("BtnContent");
                //RaisePropertyChanged(() => BtnContent);
            }
        }
        public MainWindowViewModel()
        {
            //FileCollection = new ObservableCollection<string> { "Another Item" };
            FileCollectionItems = new BindingList<string>();

            BeginCollectionCommand = new RelayCommand(BeginCollectionCommandExecute, () => true);

        }
        //addcollection writes the string to textbox
        public void BeginCollectionCommandExecute()
        {
            BtnEnabled = false;
            BtnContent = "Working";

            FileFolderCollection FFC = new FileFolderCollection();
            FFC.StartCollection();

            //string item = "Count = " + Count.ToString();
            //FileCollectionItems.Add(item);
            //Count++;

            BtnEnabled = true;
            BtnContent = "Done";
            Thread.Sleep(5000);
            BtnContent = "Start";
        }


        //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    }
} ```

I'm not very experience in WPF/MVVMLight.
...