0

У меня есть ObservableCollection он привязан к ListBox. ListBox.ItemTemplate содержит текст боксы и один чек бокс. При изменении чек бокса не меняется ObservableCollection. Изменения модели происходят, но set ObservebaleCollection не вызывается. Может быть ListBox меняет коллекцию при удалении какого либо элемента? Изменение ObservableCollection нужен для занесения данных в БД допустим после нажатия кнопки.

private bool userListOpen = false;
private ObservableCollection<UserModel> _userModels = null!;
public bool UserListOpen
{
    get => userListOpen;
    set
    {
    Set(ref userListOpen, value);
UserContext userContext = new UserContext();
if (userListOpen)
    UserModels = new ObservableCollection&lt;UserModel&gt;(userContext.GetUserList());
else
    UserModels = null;
}

} public ObservableCollection<UserModel> UserModels { get => _userModels; set => Set(ref _userModels, value); }

<TabControl>
    <TabItem Selector.IsSelected="{Binding UserListOpen}">
        <TabItem.Header>
            <TextBlock Text="Список пользователей"/>
        </TabItem.Header>
        <TabItem.Content>
            <StackPanel>
                <ListBox ItemsSource="{Binding UserModels}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <WrapPanel>
                                <TextBlock Text="{Binding Id}"/>
                                <TextBlock Text="{Binding Username}"/>
                                <TextBlock Text="{Binding Created}"/>
                                <CheckBox Content="Блокировка" 
                                          IsChecked="{Binding IsLocked}"/>
                            </WrapPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>
        </TabItem.Content>
    </TabItem>
    <TabItem>

    </TabItem>
</TabControl>

введите сюда описание изображения

Вместо текста Блокировка была привязка и она изменялась. То есть объект меняется, а коллекция нет.

aepot
  • 49,560
  • А почему вы думаете, что set свойства должен вызываться? Вы его меняете? Вы делаете коллекция = new() ? Нет. Ну так может свойство коллекции и не должно изменятся, вам так не кажется? – EvgeniyZ Oct 05 '23 at 19:30
  • Может. Но как я могу изменить коллекцию при изменении данных в listbox? – AlexandrAsh Oct 05 '23 at 19:34
  • 1
    А почему вы вообще должны ее менять? Ну вот представьте корзина с яблоками, вы взяли яблоко и откусили от него, сама корзина поменяется? Ее цвет может, размеры, положение? Нет, ибо меняются только объекты внутри. Ну вот и отслеживайте изменение самих объектов, а не корзины, для этого есть соответствующие события. INotifyPropertyChanged у "яблок" не забудьте только реализовать. И да, ObservableCollection следит только за добавлением и удалением, а не изменением, за ним следит BindingList. – EvgeniyZ Oct 05 '23 at 19:40
  • 1
    Думаю будет полезно https://ru.stackoverflow.com/a/1530540/220553 и https://ru.stackoverflow.com/a/818985/220553 – EvgeniyZ Oct 05 '23 at 19:43
  • Благодарю. А вы можете посоветовать информацию о WPF, кроме метанита и документации. – AlexandrAsh Oct 05 '23 at 20:50
  • @AlexandrAsh этот сайт(ру и англ ветки). ChatGPT тот же часто мне лично помогает. – Lapish Oct 05 '23 at 21:04
  • 2
    Посоветовать не могу, по одной простой причине - у каждого свои требования и свои источники. Единственное, не ищите информацию на РУ, не смотрите РУ ютуберов, РУ документацию, метанит, и прочее, ибо они дают поверхностно, и порой не то, что надо, не правильно. Ищите информацию на зарубежных ресурсах, у зарубежных авторов. Например, мне в свое время ооочень помог канал на ютубе AngelSix, он показывает как с самого нуля сделать WPF проект по правилам MVVM, от базы, до своего веб сервера для чата, все в рамках одного проекта, который постепенно развивал. Короче, найдите свое) – EvgeniyZ Oct 05 '23 at 21:17
  • 2
    ChatGPT не советую, совет выше вреден. Чат это T9 на стеройдах, он часто ошибается, часто дает чушь, даже на базовые вопросы часто не может дать адекватный ответ. Для новичка, который толком не знает как правильно, будет сложно отличить что он дает правильно, а что нет. Также чат приучивает к копипасту, а не к пониманию кода. – EvgeniyZ Oct 05 '23 at 21:19
  • Код UserModel почему решили оставить в секрете? Где код свойства IsLocked? – aepot Oct 06 '23 at 12:49

0 Answers0