Мне помогал 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.