【发布时间】:2019-07-25 22:43:29
【问题描述】:
我正在开发一个使用 MVVM 模式开发的 WPF 应用程序。 MainWindow 有几个在执行操作时打开的用户控件。但是,一旦操作完成并单击按钮,我想关闭用户控件。我已经看过几个地方,但到目前为止还没有运气。任何帮助将不胜感激。
有人指出我的问题与此重复:
但实际上并非如此,因为那个线程谈论的是关闭一个窗口,我的是关于关闭一个用户控件。
添加一些代码以使其清晰:
这是承载第二个用户控件的第一个用户控件中的 ItemsControl:
<Grid x:Name="UserControlGrid" Width="Auto" Height="auto" Margin="0,0,0,0">
<ItemsControl ItemsSource="{Binding ViewsToShow}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid IsItemsHost="True" Width="auto" Height="auto"></Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
现在打开第二个 UserControl ,在第一个 UserControl ViewModel 中,我这样做:
private ObservableCollection<ObservableObject> viewsToShow = new ObservableCollection<ObservableObject>();
public ObservableCollection<ObservableObject> ViewsToShow
{
get
{
return viewsToShow;
}
set
{
viewsToShow = value;
OnPropertyChanged("ViewsToShow");
}
}
ViewsToShow.Add(new SecondUserControlViewModel());
谢谢
【问题讨论】:
-
@MartinBackasch:我不认为这是重复的,因为该线程谈到关闭 Windows。这是关于用户控件的。
-
WPF 中的
UserControl不能“关闭”,因为它不能“打开”。UserControl始终需要一个可以显示它的主机(Window、Page、ContentControl等)。 “关闭UserControl”是什么意思? -
当你“关闭”一个 UserControl 时会发生什么?你怎么关闭它?
-
@UUser:你是对的。我只阅读了 MainWindow 并阅读了下一句。
-
教我错了,但是由于您使用的是
ItemsSource="{Binding ViewsToShow}"并在您的ViewModel 中使用Add,您应该也可以使用Remove