У меня есть задача - при нажатии на белый квадратик на вьюшке должна перевернуться доска и координаты слева и снизу. Итак, координаты слева находятся в листбоксе и хранятся в листе Ranks. При нажатии на квадратик происходит реверс массива (сравните значения в 1 пункте на картинке и во втором во время отладки), но во вьюшке этот реверс не отображается (числа попросту не меняются). Я решил провести эксперимент (пункт 3 на картинке) и просто создать новый лист с перевернутыми значениями координат, при нажатии на квадратик они действительно отобразились так, как должны, в обратном порядке. Также пробовал с ObservableCollection, проблема сохраняется.
Полный код для координат слева:
private List<int> ranks;
public List<int> Ranks {
get { return ranks; }
set { ranks = value; OnPropertyChanged(); }
в конструкторе:
Ranks = new List<int> { 8, 7, 6, 5, 4, 3, 2, 1 };
в команде:
get {
return changeColorCommand ??
(changeColorCommand = new RelayCommand(obj =>
{
Ranks.Reverse();
Files.Reverse();
//Board.Cells.Reverse();
CurrentColorBoard = CurrentColorBoard == CellColor.White ? CellColor.Black : CellColor.White;
}));
}
Вьюшка:
<ListBox x:Name="ListBoxRanks"
Grid.Row="0" Grid.Column="0"
Style="{StaticResource ListBoxCoordinatesRanks}"
ItemsSource="{Binding Ranks}"
HorizontalContentAlignment="Center">
</ListBox>

List<>, коллекция не оповещает о том, что в ней были какие-либо изменения, из-за чего View не обновляет. В случае сObservableCollection<>, у него попросту нету метода.Reverse(), он есть уLINQ, а тот в свою очередь возвращает вам новую коллекцию, а не меняет исходную. В любом случае, вам надо либо пересоздавать коллекцию с перевернутыми данными (напримерRanks = new (Ranks.Reverse<int>());), либо явно вызыватьOnPropertyChanged("Ranks")после реверса, что оповестит UI. – EvgeniyZ Feb 02 '22 at 18:37Ranks = new ObservableCollection<int>(Ranks.Reverse());до этого, не работало (сейчас все ок), а вот OnPropertyChanged("Ranks") вообще не сработало. Однако почему при создании нового объекта листа в команде (на картинке 3 пункт) данные меняются, если коллекция не оповещает об изменениях (или это касается только изменения в уже созданном объекте?) – Pekor Feb 02 '22 at 18:57public Type Name {get; set;}, вы его привязали и вдруг в коде решили написатьName = ...;, но изменений вдруг не видите, почему? Правильно, свойство не реализуетINPC, как только свойство начнет вызывать метод обновления, UI сразу начнет получать свежие данные. У вас, свойствоRanksвызываетOnPropertyChanged(), то есть, приRanks = new();, UI подхватит новую коллекцию. НО, если вы сделаетеRanks.Add(...);, то изменений не будет, почему? Верно, у данной коллекции нетуINotifyCollectionChanged, которое оповещает об изменениях внутри. – EvgeniyZ Feb 02 '22 at 19:03INotifyCollectionChanged, по умолчанию, реализуют всего 2 коллекцииObservableCollection<>иBindingList<>, вот если используете их, то все добавления и удаления объектов будут отображаться в UI. Если же меняется конкретно значение свойства, то этоINotifyCollectionChanged, вызов его методов.OnPropertyChanged("Ranks") вообще не сработало- скорей всего не там вызвали, без кода не скажу.данные меняются- пояснил выше, у вас свойствоRanksвызывает INPC. – EvgeniyZ Feb 02 '22 at 19:07