如何从其视图模型中关闭用户控件

How to close User Control from its View Model

我这样创建 UserControl

MyUserCtrl myctrl = new MyUserCtrl() { DataContext = new MyViewModel()};
ControlCollection.Add(myctrl);

我使用这个 ItemsControl ItemsSource="{Binding ControlCollection}" 将它输出到视图。

它干净漂亮,但问题是我不知道如何关闭我打开的 UserControls

如果我只是将它删除到集合中呢?因此视图模型也会关闭?

不要将 UI 元素的集合分配给 ItemsControl 的 ItemsSource。相反,将 UI 元素放入 ItemsControl 的 ItemTemplate 并将视图模型实例的集合传递给 ItemsSource。

<ItemsControl ItemsSource="{Binding MyItems}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <local:MyUserCtrl />
        </DataTemplate>
    </ItemsCControl.ItemTemplate>
</ItemsCControl>

将视图模型项添加到您的 "main" 视图模型中的集合 属性:

var item = new MyViewModel();
MyItems.Add(item);

对于 "close" 控件,从集合中删除适当的项目:

MyItems.Remove(item);