С# wpf не будет обновляться с использованием привязки массива

У меня есть простой Ellispis на wpf, который я привязываю к элементу массива «Данные [0]», чтобы анимировать его. Проблема в том, что когда я привязываю его к этому массиву, а его значение переключается на «истина/ложь», это не влияет на пользовательский интерфейс.

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

<Ellipse Width = "19"
Height = "18"
Margin = "29,137,0,0"
HorizontalAlignment = "Left"
VerticalAlignment = "Top"
Fill = "{Binding Data[0], 
    Converter = {StaticResource BooleanToBrushConverter}, 
    Mode=OneWay,
    UpdateSourceTrigger=PropertyChanged}"
Stroke = "Black" />

Когда я привязываюсь к этому массиву, нет обновления пользовательского интерфейса:

    public bool[] Data
    {
        get{ return _data; }
        set{ _data= value; }
    }
    private bool[] _data= new Boolean[20];

Когда я делаю привязку к этому bool, он работает:

    public bool DataSimple
    {
        get { return _dataSimple; }
        set { _dataSimple=value; }
    }
    private bool _dataSimple;

Это используется для обновления значений и контроля, которые они достигли, и оба показывают хороший результат в отладке:

    private void RefreshData(object sender, EventArgs e)
    {
        _data= _process.DataRes;
        _dataSimple= _process.DataRes[0];
        Debug.WriteLine(_data[0]);
        Debug.WriteLine(_dataSimple);
    }

Может ли кто-нибудь попробовать помочь мне в этом? Спасибо

Мне кажется, это потому, что вы привязываетесь к индексу массива bool 0, а не к самому массиву bool (у которого есть геттер/сеттер). Попробуйте создать BooleanArrayToBrushConverter, где вы берете только первый элемент и возвращаете его кисть. Затем измените привязку на `Fill = "{BInding Data, Converter = {StaticResource BooleanArrayToBrushConverter},". Я также смущен тем, как все это работает без INotifyPropertyChanged, но я отвлекся.

Tam Bui 10.12.2020 18:32

Под переключателем я имел в виду переключение «значение = не значение» с «истина на ложь» или «ложь на истину». Я действительно новичок в C#. Но со всеми вашими комментариями я это сделал. Вместо использования массива я использовал ObservableCollection, я привязал его к пользовательскому классу, а также добавил INotifyPropertyChanged, после чего это сработало. Мне нужно больше узнать об этом, потому что это работает, но я не понимаю, как все ведут себя и взаимодействуют. Спасибо ребята

Waldon 11.12.2020 07:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
223
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Если вы обновляете отдельные логические значения, замените bool[] на ObservableCollection<bool> и инициализируйте его соответствующим количеством элементов.

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

Другие вопросы по теме