【发布时间】:2014-04-21 18:25:13
【问题描述】:
我是 Caliburn Micro 的新用户,想了解一些关于开发我的应用程序界面和视图之间导航的路径的建议。 我的想法是有一个包含按钮菜单的 MainWindow,每个按钮都与一个特定的视图相关。每个视图都将存储在单独的 WPF UserControl 中。 mainWindow 还将包含一个 TabControl 绑定到 viewmodel 上的选项卡的 ObservableCollection。每次单击菜单上的按钮时,我都想添加一个带有 ContentPresenter 的新选项卡,该选项卡将动态加载视图及其相应的视图模型。
所以我的问题:
1) 我应该在这里使用 Screen Collection 吗?
2) UserControl 是否应该实现 Screen 接口?
3) 我如何告诉 MainWindow ViewModel 在新添加的选项卡上加载哪个视图以保持视图模型解耦?
提前感谢大家。
更新
经过大量阅读和社区的一些帮助,我设法解决了这个问题。这是生成的 AppViewModel:
class AppViewModel : Conductor<IScreen>.Collection.OneActive
{
public void OpenTab(Type TipoVista)
{
bool bFound = false;
Screen myScreen = (Screen)Activator.CreateInstance(TipoVista as Type);
myScreen.DisplayName = myScreen.ToString();
foreach(Screen miItem in Items)
{
if (miItem.ToString() == myScreen.ToString())
{
bFound = true;
ActivateItem(miItem);
}
}
if (!bFound) ActivateItem(myScreen);
}
public ObservableCollection<MenuItem> myMenu { get; set; }
public ObservableCollection<LinksItem> myDirectLinks { get; set; }
public ICommand OpenTabCommand
{
get
{
return new RelayCommand(param => this.OpenTab((Type) param), null);
}
}
public AppViewModel()
{
OpenTab(typeof(ClientsViewModel));
MenuModel menu = new MenuModel();
myMenu = menu.getMenu();
myDirectLinks = menu.getLinks();
}
public void CloseTab(Screen param)
{
DeactivateItem(param, true);
}
}
我必须保留 OpenTabCommand 中的 ICommand,因为 Caliburn.micro 的命名约定似乎在 DataTemplate 中不起作用。希望它可以帮助别人。谢谢大家
【问题讨论】:
标签: c# wpf mvvm caliburn.micro