Ну в вашем коде пока вообще нет потоков и Task-ов.
Так что ошибка не связана с ними в данный момент.
Так что не совсем понятно что Вы хотите: чтобы Вашу исходную программу отдебажили?
Ну если мне надо знать, что какой-то элемент коллекции изменил своё состояние
(например, что провести какие-то проверки или валидации или изменить текст, описывающий состояние),
я обычно в этом случае просто в каждый элемент прокидываю какой-то Action, который дёргается при OnPropertyChanged элемента. А уже сам этот Action делает какие-то операции, например, одну их тех, что я описал выше.
Нет, коллекции никто ничего не сообщит.
Как я писал выше, изменение коллекции: удалён элемент, добавлен, замещён на другой, перемещён на другую позицию.
Но надо различать, в описанных мною случаях срабатывает событие CollectionChanged у объекта ObservableCollection. Вы можете сами сгенерировать такое событие при изменении свойства элемента,
но тогда Вам надо создать свой список MyObservableCollection унаследованный от ObservableCollection и в нём создать какой-то метод Update или ChangesNotify где будет генерироваться
событие CollectionChanged.
А чтобы сработал set - это очень нежелательно, так как это сильно ударит по perfomance отрисовки из-за
того, что будет всё заново перерисовываться, а это очень нежелательно и дорого по ресурсам, плюс потом придётся мучаться с такими вещами как запоминание позиционирования.
> Нет. Сет срабатывает когда в коллекции изменения, а не присвоена новая коллекция.
Нет, когда в коллекции есть изменения срабатывает CollectionChanged у объекта ObservableCollection
И причём не изменения свойств а именно изменение коллекции: удалён элемент, добавлен, замещён на другой, перемещён на другую позицию.
Насколько я понимаю, Вы думаете, что изменится в UI состояние CheckBox-а, то вызовется метод set у DayWeek. Если Вы так действительно думаете, то это не так. Коллекция в этом случае не изменяется.
Если вы в List list измените значение, например, list[0]=10;, ведь это не вызывает изменения коллекции list. Тоже самое и в вашем примере.
Zimaell, Когда ты написал string str; реально ничего не создаётся (типа такая оптимизация).
Поэтому и потом присваивать в неё ничего нельзя, так как её нет.
Или надо написать string str = ""; или string str = null;
Как-то так, если эти два значения могут быть одинаковы.