Я пытаюсь реализовать метод, который позволяет изменить квадратную фигуру на круг. Когда я бегу, теперь есть квадрат, который можно перемещать. В любом случае, как реализовать команду для квадратной кнопки?Реализация BtnSquareCommand/RelayCommand
namespace Square
{
public class MainViewModel : INotifyPropertyChanged
{
private double _x;
public object Content { get; set; }
public double X
{
get { return _x; }
set
{
_x = value;
}
}
public ICommand BtnSquareCommand = new RelayCommand(); //I'm stuck here
public double Y { get; set; }
public MainViewModel()
{
Content = new SquareViewModel();
}
private void SetSquare()
{
Content = new SquareViewModel();
}
private void SetCircle()
{
Content = new SquareViewModel();
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnProperrtyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
EDIT:
Кнопки уже реализованы, но не их функциональности, так что они ничего
namespace Square
{
public class MainViewModel : INotifyPropertyChanged
{
private double _x;
public object Content { get; set; }
public double X
{
get { return _x; }
set
{
_x = value;
}
}
public ICommand BtnSquareCommand {get ; set;}
public ICommand BtnCircleCommand {get ; set;}
public double Y { get; set; }
public MainViewModel()
{
Content = new SquareViewModel();
}
private void SetSquare()
{
Content = new SquareViewModel();
}
private void SetCircle()
{
Content = new CircleViewModel();
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnProperrtyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Что мне делать после этого не делать?
....
namespace Sqaure
{
public class MainViewModel : INotifyPropertyChanged
{
private double _x;
public object Content { get; set; }
public double X
{
get { return _x; }
set
{
_x = value;
OnPropertyChanged("Content");
}
}
public ICommand BtnSquareCommand { get; set; }
void BtnSquareCommand_Click(object obj)
{
SetSquare();
}
public ICommand BtnCircleCommand { get; set; }
void BtnCircleCommand_Click(object obj)
{
SetCircle();
}
public double Y { get; set; }
public MainViewModel()
{
Content = new SquareViewModel();
BtnSquareCommand = new RelayCommand(BtnSquareCommand_Click);
}
private void SetSquare()
{
Content = new SquareViewModel();
}
private void SetCircle()
{
Content = new CircleViewModel();
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
Console.WriteLine("HEEJ");
}
public class RelayCommand : ICommand
{
readonly Action<object> _execute;
readonly Func<bool> _canExecute;
public RelayCommand(Action<object> execute, Func<bool> canExecute = null)
{
if (execute == null)
throw new ArgumentNullException(nameof(execute));
_execute = execute;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute.Invoke();
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
_execute(parameter);
}
}
}
}
Вы не можете связываться с 'общественной ICommand BtnSquareCommand = новый RelayCommand()' из XAML, если это то, что вы используете. Вам нужно изменить его на 'public ICommand BtnSquareCommand {get; set;} 'like, я предоставил вам ответ в моем ответе ниже –
Вы все еще не используете' public MainViewModel() 'part ... –