如何从其视图模型中关闭用户控件
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);
我这样创建 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);