Мы не можем видеть, как вы обновляете свойство IsFilterOn
с true
до false
, но если вы напрямую изменяете свойство одного из экземпляров FilterModel
в списке, событие изменения свойства не будет быть вызванным.
ObservableCollection
будет выполнять события измененных свойств, когда вы добавляете или удаляете что-то из списка, но не наблюдаете свойства объектов.
У вас есть 2 варианта, либо вызовите Свойства Измененные события из вашего FilterModel
в любое время IsFilterOn
обновляются или изменяют все значения свойств, которые вам нужны, а затем вручную выполняют изменение свойства в списке. Если вы обновляете несколько FilterModel
с одновременно, производительность, вероятно, будет выше со вторым вариантом.
Опция 1:
public class FilterModel : INotifyPropertyChanged {
public string UpColour { get; set; }
public string DownColour { get; set; }
private bool _isFilterOn = false;
public bool IsFilterOn {
get { return _isFilterOn; }
set {
_isFilterOn = value;
NotifyPropertyChanged(); // Anytime this property is changed Property Changed will be executed
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Опция 2:
public class FilterViewModel {
private ObservableCollection<FilterModel> _filters;
public ObservableCollection<FilterModel> Filters {
get => _filters ?? (_filters = new ObservableCollection<FilterModel>());
set {
_filters = value;
NotifyPropertyChanged();
}
}
public void ToggleFilters() {
// some logic
Filters[0].IsFilterOn = true; // Make all property changes
NotifyPropertyChanged(nameof(Filters)); // Tell the UI that the list has been updated and to refresh the data
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}