@Pitonist224

Как сделать привязку к свойству другого класса?

Есть несколько radiobuttons, которым нужно при нажатии менять свойство (MethodName) в классе MethodViewModel через привязку. Но, чтобы поменять свойство нужно выполнить метод ChangeMethodName, который находиться по пути MainViewModel.MethodViewModel.ChangeMethodName, т.к. в файле MainWindow.xaml.cs у меня прописано
public MainWindow()
        {
            InitializeComponent();

            DataContext = new MainViewModel();
        }


Как это можно сделать?
И, вообще, правильно ли создавать 2 ViewModel класса и потом пихать в MainViewModel MethodViewModel ?

Код:
public class MainViewModel
    {
        public MethodViewModel MethodViewModel { get; set; }
    }

public class MethodViewModel : INotifyPropertyChanged
    {
        public ICommand ChangeMethodName { get; private set; }
        private string _methodName;
        public string MethodName
        {
            get => _methodName;
            set
            {
                _methodName= value;
                OnPropertyChange("MethodName");
            }
        }

        public MethodViewModel()
        {
            ChangeMethodName = new RelayCommand(ExecuteChangeMethodName, CanExecuteChangeMethodName);
        }

        #region PropertyChangedImplementation
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChange(string propertyname)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
            }
        }
        #endregion

        private bool CanExecuteChangeMethodName(object parameter)
        {
            if (parameter != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        private void ExecuteChangeMethodName(object parameter)
        {
            Method = (string)parameter;
        }
    }
  • Вопрос задан
  • 369 просмотров
Пригласить эксперта
Ответы на вопрос 1
@SlNik
Возможно такой способ тебе подойдёт:
1 - Измени private на public у метода ExecuteChangeMethodName
2 - Приведение типов делай не к string, а к radiobuttons
3 - В параметры передавай тот radiobuttons которому нужно изменить Name
MainViewModel DataContext = new MainViewModel();
            Button button = new Button();
            button.Name = "Имя №1";
            DataContext.MethodViewModel.ExecuteChangeMethodName(button);

  public void ExecuteChangeMethodName(object parameter)
        {
            Button button = (Button)parameter;
            button.Name = "Новое имя";
        }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы