У меня есть простой 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);
}
Может ли кто-нибудь попробовать помочь мне в этом? Спасибо
Под переключателем я имел в виду переключение «значение = не значение» с «истина на ложь» или «ложь на истину». Я действительно новичок в C#. Но со всеми вашими комментариями я это сделал. Вместо использования массива я использовал ObservableCollection, я привязал его к пользовательскому классу, а также добавил INotifyPropertyChanged, после чего это сработало. Мне нужно больше узнать об этом, потому что это работает, но я не понимаю, как все ведут себя и взаимодействуют. Спасибо ребята
Ваш вопрос не совсем ясен относительно того, что именно вы меняете и ожидаете, что это вызовет обновление пользовательского интерфейса.
Если вы обновляете отдельные логические значения, замените bool[]
на ObservableCollection<bool>
и инициализируйте его соответствующим количеством элементов.
Если вы предоставляете совершенно новый массив логических значений, тогда ваши классы должны реализовать INotifyPropertyChanged
для обновленных свойств.
Мне кажется, это потому, что вы привязываетесь к индексу массива bool 0, а не к самому массиву bool (у которого есть геттер/сеттер). Попробуйте создать BooleanArrayToBrushConverter, где вы берете только первый элемент и возвращаете его кисть. Затем измените привязку на `Fill = "{BInding Data, Converter = {StaticResource BooleanArrayToBrushConverter},". Я также смущен тем, как все это работает без INotifyPropertyChanged, но я отвлекся.