我有什么:
我有一个名为Job
的Model对象,其中包含JobTask
中ObservableCollection
的列表 - 让我们调用此taskList
。我通过Job
- (System.Windows.Controls.ItemsControl)显示ItemsControl
,其ItemsSource
绑定到taskList
。通过将ItemsControl.Template
设置为自定义DataTemplate
来显示UserControl
- 让我们调用此JobTaskDisplayPanel
,其中包含与jobTask相关的UIControl,例如标题,描述,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
的{{1}}(模型列表)进行更改,具体来说我想在每个JobTaskDisplayPanel
中添加一个“删除”按钮按下JobTaskDisplayPanel
时,会从其父级JobTask
中删除taskList
,从而将其从应用程序模型中删除。
答案 0 :(得分:1)
我要求你的JobTask
有一个名为Parent
的属性,该属性会引用与之关联的Job
,所以你可以去
this.Parent.RemoveTask(this);
或者我会使用某种EventSystem,例如Prism的EventAggregator
或MVVM Light Messenger
。在这种情况下,您的JobTask
会广播一条消息,说明要将其自身从拥有它的任何内容中移除,Job
对象将订阅接收这些消息,如果它包含JobTask
中的消息事件消息,它将删除它。
答案 1 :(得分:0)
由于您使用的是ItemsControl,因此单击该按钮时不会收到SelectedIndex或SelectedItem,就像使用ListBox一样。现在,这会强制您的项目告诉DataContext管理它需要删除的项目集合。
您需要做的是将删除按钮添加到Panel。在项目的DataContext中创建一个新事件,将其命名为OnDelete。将按钮的命令绑定到Item上的方法,该方法将引发OnDelete事件并将其自身作为发送方传递。您的jobTasksList所在的父DataContext将需要处理此事件并将其从ItemsControls Items集合中删除。将事件的对象发件人作为项目的类投射后,您可以找到该项目。
您也可以使用它作为命令参数将项目传递给Delete方法,但由于您必须通知项目管理器的管理器项目被删除,因此它并不能真正为您购买任何东西。