using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace WpfApp1
{
///
/// Interaction logic for Window016.xaml
///
public partial class Window016 : Window
{
public Window016()
{
InitializeComponent();
}
}
}
namespace WpfApp016
{
class Viewmodel : ViewModelBase, ICommand
{
public Viewmodel()
{
model = new Model();
model.PropertyChanged += (s, e) => OnPropertyChanged(e.PropertyName);
}
private readonly Model model;
public bool IsLevel
{
get => model.IsLevel;
set { model.IsLevel = value; }
}
public void Execute(object? parameter) => model.Start();
public event EventHandler? CanExecuteChanged;
public bool CanExecute(object? parameter) => true;
}
public class Model : INotifyPropertyChanged
{
public bool IsLevel { get; set; }
internal void Start() => Task.Run(() =>
{
Thread.Sleep(1000);
IsLevel = !IsLevel;
OnPropertyChanged(nameof(IsLevel));
});
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propName = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propName = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
}