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会更好。