C# 是否正在使用ChildViewModel从ShellViewModel的BindableCollection中删除项?
我有一个带有C# 是否正在使用ChildViewModel从ShellViewModel的BindableCollection中删除项?,c#,wpf,mvvm,caliburn.micro,C#,Wpf,Mvvm,Caliburn.micro,我有一个带有BindableCollection的ShellViewModel,它在ItemControl的帮助下绑定到画布上 我通过ShellViewModel中的一个按钮将从Screen派生的ChildViewModel添加到这个bindableCollection中 我在ChildViewModel中有一个closebutton,单击此按钮,我想从ShellViewModel的BindableCollection中删除项 请提供帮助。如果您需要在不同的viewmodels之间通话,您应该使
BindableCollection
的ShellViewModel,它在ItemControl的帮助下绑定到画布上
我通过ShellViewModel中的一个按钮将从Screen派生的ChildViewModel添加到这个bindableCollection中
我在ChildViewModel中有一个closebutton,单击此按钮,我想从ShellViewModel的BindableCollection中删除项
请提供帮助。如果您需要在不同的viewmodels之间通话,您应该使用messenger。这里有一个来自mvvm light toolkit的示例:如果您想维护现有的实现,您可以始终创建一个事件并使用EventAggregator。您的ChildViewModel需要发布事件,ShellViewModel需要实现
IHandle
接口。作为该实现的一部分,它将能够从BindableCollection中删除ChildViewModel。一般来说,它看起来像这样:
public class ChildViewModelMessage {
// Implementation here
}
public class ShellViewModel : IHandle<ChildViewModelMessage> {
...
public void Handle(ChildViewModelMessage message) {
// Handle here
}
}
public class ChildViewModel {
...
public IEventAggregator Events { get; set; }
protected void HandleClose() {
this.Events.Publish(new ChildViewModelMessage());
}
公共类ChildViewModelMessage{
//在这里实现
}
公共类ShellViewModel:IHandle{
...
公共无效句柄(ChildViewModelMessage消息){
//在这里处理
}
}
公共类ChildViewModel{
...
公共IEventAggregator事件{get;set;}
受保护的无效HandleClose(){
this.Events.Publish(新的ChildViewModelMessage());
}
我可能弄错了,但我认为在ShellViewModel上继承Conductor.Collection.OneActive会更好。