Как распространять изменения, сделанные вне моего представления, в приложении WPF

#c# #.net #wpf #xaml #binding

#c# #.net #wpf #xaml #привязка

Вопрос:

У меня есть свойство, называемое IsVisible :

 public new bool IsVisible
{
    get { return base.IsVisible; }
    set
    {
        base.IsVisible = value;
        this.RaisePropertyChanged ( "IsVisible" );
    }
}
  

Итак, это свойство устанавливается на true , когда левая кнопка мыши нажата для выбранного элемента в TreeView . Это работает нормально, но у меня также есть CheckBox я пытаюсь привязать к одному и тому же свойству двусторонним способом. Поэтому всякий раз, когда я изменяю это свойство с помощью нажатой левой кнопки мыши, CheckBox показывает состояние isVisible, если оно верно. Итак, это работает частично.

Но проблема в том, что каждый раз, когда я устанавливаю этому свойству значение true для экземпляра, IsVisible свойству всех других слоев присваивается значение false, но CheckBox es не показывают изменения. Они все еще выглядят проверенными.

Поэтому всякий раз, когда я говорю:

 layer.IsVisible = true;
  

для всех остальных слоев базовым классом установлено значение false, к исходному коду которого у меня нет доступа (показано выше).

Как я могу заставить мое приложение распознать это изменение?

Ответ №1:

Итак, вы скрываете свойство isVisible базового класса, которое не реализует INotifyPropertyChanged? Все флажки привязаны к вашему классу (не к базовому)?

Можете ли вы имитировать поведение базового класса, выполняя итерации по необходимым слоям и внося те же изменения в свои собственные свойства (которые, очевидно, уведомляют)?

Комментарии:

1. Спасибо, да, я скрываю это с помощью new ключевого слова, так что это работает, это определенно привязывается к моему классу. Что касается имитации поведения, я мог бы просмотреть все объекты, привязанные к моему приложению, что было бы единственным способом, иначе нет способа узнать, какие слои скрыты базовым классом, потому что за этим всегда clear all действием следует значение layer visible .

2. Если вы можете перейти ко всей коллекции ваших классов, вы могли бы просто создать метод с именем «UpdateFromBase()» (или что-то в этом роде) и в нем просто вызвать это. isVisible = base. Является видимым.