2 класса (1 ВМ 1 услуга) изменение / доступ к свойству в одноэлементном классе - PullRequest
0 голосов
/ 26 сентября 2019

Итак, я пытаюсь использовать свой класс-посредник в качестве промежуточного звена для моей службы и моей виртуальной машины, когда дело касается пары логических значений.

В моем посреднике у нас есть следующее:

    private bool isAddGroupChecked = false;
    public bool IsAddGroupChecked
    {
        get { return isAddGroupChecked; }
        set
        {
            isAddGroupChecked = value;
            NotifyPropertyChanged();
        }
    }

Моя служба извлекает / изменяет это значение, выполняя следующие действия (для изменения)

ActionMediator.Instance.IsAddGroupChecked = false;

В моей виртуальной машине это булево значение может быть изменено через представление и имеет следующее свойство:

    public ActionMediator ActionMediator
    {
        get { return ActionMediator.Instance; }
    }

    public bool IsAddGroupChecked
    {
        get { return ActionMediator.IsAddGroupChecked; }
        set
        {
            ActionMediator.IsAddGroupChecked = value;
            NotifyOfPropertyChange(() => IsAddGroupChecked);
        }
    }

Проблема в том, что при нажатии переключателя (isAddGroupChecked) значение на синглтоне изменяется на True правильно.Однако, когда моя служба изменяет значение (скажем, обратно на false), виртуальная машина не уведомляется об этом ..... где я ошибаюсь?Я делаю это так, чтобы мой сервис и ВМ не были связаны друг с другом этим ...

1 Ответ

1 голос
/ 26 сентября 2019

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

Таким образом, у вас есть (как минимум) три варианта

  1. Для того, чтобы изменить состояние вашей виртуальной машины на вашем виртуальном компьютере, нужно PropertyChanged *.
public VM()
{
    ActionMediator.Instance.PropertyChanged += new PropertyChangedEventHandler(Mediator_PropertyChanged);
}

private void Mediator_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "IsAddGroupChecked")
        this.IsAddGroupChecked = ActionMediator.Instance.IsAddGroupChecked;
}

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

private bool isAddGroupChecked = false;
public bool IsAddGroupChecked
{
    get { return isAddGroupChecked; }
    set
    {
        if (value != isAddGroupChecked)
        {
            isAddGroupChecked = value;
            NotifyPropertyChanged();
        }
    }
}
Предоставьте экземпляр вашей виртуальной машины вашей службе, чтобы он мог напрямую изменять состояние (хотя это и не очень хорошая идея) Удалите свойство IsAddGroupChecked из вашей виртуальной машины и привязайте ваше представление непосредственно к ActionMediator.IsAddGroupChecked
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...