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