Я думаю, что свойство в 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));
}
}