Как динамически обновить свойство в одной ViewModel на основе настроек, установленных в других ViewModel? - PullRequest
0 голосов
/ 09 марта 2020

У меня есть это в моей ViewModel # 1

public bool IsThereAProperty
{
    get
    {
        return App.Current.Properties.ContainsKey("myKey");
    }
}

Я связываюсь с этим свойством в моем представлении. Как я могу обновить это, чтобы, если я добавлю ключ в App.Current.Properties (в других ViewModels), изменения будут учтены в этой ViewModel # 1, а также в моем представлении?

1 Ответ

1 голос
/ 10 марта 2020

Я думаю, что свойство в ViewModel не будет обновляться динамически, через App.Current.Properties это глобальное свойство, если вы добавите ключ к App.Current.Properties в других ViewModels, глобальное свойство изменится, но ваше свойство IsThereAProperty в вашей ViewModel не будет, потому что это просто свойство вашей viewmodel, поэтому вы должны уведомить вашу viewmodel об обновлении IsThereAProperty, затем представление, привязка которого будет обновлена.

Вы можете использовать MessagingCenter для уведомления модели представления при добавлении ключа в другую модель представления.

например, в viewmodel # 2 вы добавляете ключ и удаляете ключ:

if (!App.Current.Properties.ContainsKey("myKey"))
  {
    App.Current.Properties.Add("myKey", true);
    MessagingCenter.Send<string, bool>("change", "add a key", App.Current.Properties.ContainsKey("myKey"));

  }
else
  {
    App.Current.Properties.Remove("myKey");
    MessagingCenter.Send<string, bool>("change", "add a key", App.Current.Properties.ContainsKey("myKey"));
  }         

затем в вашей модели представления # 1:

public class Model1 : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public bool isIsThereAProperty;
    public bool IsIsThereAProperty
    {
        set
        {

           isIsThereAProperty = App.Current.Properties.ContainsKey("myKey");
           OnPropertyChanged("IsIsThereAProperty");

        }
        get
        {
            return App.Current.Properties.ContainsKey("myKey");
        }
    }

    public Model1()
    {
        MessagingCenter.Subscribe<string>("change","add a key" ,(sender)=>
        {

            OnPropertyChanged("IsIsThereAProperty");

        });
    }
    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...