как передать значение свойства в свойство другого класса в wpf mvvm - PullRequest
0 голосов
/ 17 октября 2018

Я хочу передать значение SecondViewModel SecondProperty в ViewModel myProperty и показать значение в TextBlock .Я хочу, чтобы кодирование было сделано в SecondViewModel.Надеюсь, что это понятно.

Спасибо за помощь в Advance.

Просмотр:

<TextBlock Text="{Binding Path=myProperty}"/>

ViewModel:

private int _myProperty;
public int myProperty
{
    get { return _myProperty; }
    set { _myProperty = value; OnPropertyChanged("myProperty"); }
}

SecondViewModel:

private int _secondProperty;
public int SecondProperty
{
   get { return _secondProperty; }
   set { _secondProperty = value; OnPropertyChanged("SecondProperty"); }
}

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Если вам это нужно, вам следует создать источник данных виртуальной машины для создания зависимости в вашей первой виртуальной машине.

public class YourViewModelDataSource
 {

private ViewModel viewModel;
private SecondViewModel secondViewModel;

public YourViewModelDataSource(ViewModel viewModel, SecondViewModel secondViewModel)
    {
      this.viewModel = viewModel;
      this.secondViewModel = secondViewModel;
    }

public void CreateDataSource()
    {
      this.secondViewModel.PropertyChanged += this.OnSecondViewModelPropertyChanged;
    }

private void OnSecondViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            switch (e.PropertyName)
            {
                //As pointed in comments, you need to have the second property in your first ViewModel then do this.
                case "SecondProperty":
                    this.viewModel.myProperty = this.secondViewModel.SecondProperty;
                    break;
            }
        }
  }

Когда вы создаете свои виртуальные машины, используйте этот класс для создания зависимости.Каждый раз, когда SecondViewModel SecondProperty изменяется, ViewModel myProperty будет повышаться.Надеюсь, это понятно, дайте мне знать, если вам нужно что-то еще

0 голосов
/ 17 октября 2018

Исходя из вашего комментария, предполагая, что ViewModel содержит коллекцию SecondViewModel элементов, вам нужно установить PropertyChangedEvent для каждого экземпляра SecondViewModel, чтобы вызвать ViewModel.myProperty для обновления.например ...

public class ViewModel
{
    private List<SecondViewModel> _secondViewModels = new List<SecondViewModel>();

    public IEnumerable<SecondViewModel> SecondViewModels => _secondViewModels;

    public int myProperty => _secondViewModels.Sum(vm => vm.SecondProperty);

    public void AddSecondViewModel(SecondViewModel vm)
    {
        _secondViewModels.Add(vm);
        vm.PropertyChanged += (s, e) => OnPropertyChanged(nameof(myProperty));
        OnPropertyChanged(nameof(myProperty));
    }
}

В качестве отступления, вы никогда не должны вызывать OnPropertyChanged() с "волшебной строкой" - используйте вместо нее nameof().

...