【发布时间】:2015-12-15 04:48:02
【问题描述】:
我们已经为我们的 WPF 应用程序提供了一个现有的 UI,其中单独的按钮按下将显示基于绑定到可见性 (MVVM) 的元素,其中 ICommand 将设置这些可见性属性打开或关闭。这些效果很好,但最近我们被要求按下按钮来显示/隐藏元素,就像以前一样,但是另一种类型的按钮按下来显示一些其他元素,但在 TabControl 内。
我想这样做的方式是:
a) 创建包含这些元素的单独用户控件
b) 这些用户控件在运行时通过 ViewModel 实例化,具体取决于按钮按下,并通过 ObservableCollection 作为 ItemsSource 绑定到 View:
视图模型:
private ObservableCollection<Object> centerView;
public ObservableCollection<Object> CenterView
{
get { return centerView; }
}
...
UserControlOfReportRelatedElements reportsView = new UserControlOfReportRelatedElements();
CenterView.Clear();
Grid.SetRow(reportsView, 0);
CenterView.Add(reportsView);
XAML:
<ItemsControl ItemsSource="{Binding CenterView}" Grid.Row="2">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
因此,根据 UserControl 是否包含在 TabControl 中,我们只需将其滑入 ObservableCollection(在运行时)。
这行得通,而且很方便。但这会破坏 MVVM 吗?我们还有什么可以做的吗?
【问题讨论】: