Привязка объекта списка - изменение списка модели из элемента управления элемента списка - PullRequest
0 голосов
/ 15 декабря 2011

Что у меня есть:

У меня есть объект Model с именем Job, который содержит список JobTask в ObservableCollection - давайте назовем это taskList,Я отображаю Job, имея ItemsControl - (System.Windows.Controls.ItemsControl), у которого ItemsSource привязан к taskList.Это ItemsControl.Template отображается с его DataTemplate установленным на заказ UserControl - назовем это JobTaskDisplayPanel, у которого есть UIControls, относящиеся к заданию задания, например, заголовок, описание, iscomplete и т. Д. Эта настройка в настоящее время работает, ион отображает список JobTaskDisplayPanel с привязанной информацией в ItemsControl.

Пример кода:

ItemsControl xaml:

        <ItemsControl ItemsSource="{Binding}" Name="jobsTaskList">
            <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <ucs:JobTaskDisplayPanel Margin="4"/>
                    </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

Как я привязываюсь к этому (я привязываю к нему из кода):

jobsTaskList.ItemsSource = currentJob.taskList;

Что я хочу:

Я хотел бы знать, как вносить измененияк taskList (список моделей) от каждого из JobTaskDisplayPanel, в частности, я хотел бы поместить кнопку «Удалить» внутри каждого из JobTaskDisplayPanel, который при нажатии удалял бы JobTask из родительского taskList, удаляя его из приложения Model.

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Я бы хотел, чтобы у вашего JobTask было свойство с именем Parent, которое указывало бы на Job, с которым оно было связано, так что вы можете перейти

this.Parent.RemoveTask(this);

или я бы использовал какую-нибудь EventSystem, такую ​​как Prism EventAggregator или MVVM Light's Messenger. В этом случае ваш JobTask будет транслировать сообщение о том, что он удаляет себя от того, кому он принадлежит, и объект Job будет подписываться на получение этих сообщений, и если он содержит JobTask, который находится в сообщении о событии, он удали это.

0 голосов
/ 15 декабря 2011

Поскольку вы используете ItemsControl, вы не получите SelectedIndex или SelectedItem при нажатии кнопки, как если бы вы использовали ListBox. Теперь это заставляет ваш элемент сообщать DataContext, управляющему коллекцией элементов, которую он должен удалить.

Что вам нужно сделать, это добавить кнопку удаления на панель. Создайте новое событие в DataContext элемента, назовите его как OnDelete. Свяжите команду кнопки с методом на вашем Предмете, который вызовет событие OnDelete и передаст себя в качестве отправителя. Ваш родительский DataContext, где находится ваш jobTasksList, должен будет обработать это событие и удалить его из коллекции ItemsControls Items. Вы можете найти этот предмет, как только вы разыграете отправителя объекта в качестве класса Предмета.

Вы также можете передать элемент методу Delete, используя его в качестве параметра команды, но, поскольку вам уже нужно уведомить менеджера коллекции предметов, что элемент удален, он на самом деле ничего вам не купит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...