Caliburn.Micro 从 Usercontrol 到 ShellViewModel 的导航
Caliburn.Micro Navigation from Usercontrol over ShellViewModel
描述
我在版本 4 中使用 Caliburn.Micro 并尝试从一个用户控件导航到另一个页面。 ShellView.xaml 有一个 <ContentControl x:Name="ActiveItem" />
元素和所有导航方法,如 DashboardView()
、GcsImportView()
... 只要我在 ShellView.xaml 内就可以工作。但是,如果我从用户控件(在 ContentControl 内部)调用,则什么也不会发生。我什至没有得到错误。我可以按下按钮 thousend 次而没有任何反应。我希望有人能在这里帮助我。
更新
即使我尝试使用这些 site 中的代码,它也不起作用。在调试时,ActiveItem 值将被更改。这看起来像是一个错误?
ShellViewModel.cs
namespace GCS.ViewModels
{
public class ShellViewModel : Conductor<object>//, IHandle<GcsImportProgressViewModel>
{
private string _version = "v. " + Assembly.GetExecutingAssembly().GetName().Version.ToString();
public string Version
{
get { return _version; }
}
public ShellViewModel(/*IEventAggregator eventAggregator*/)
{
DashboardView();
//eventAggregator.SubscribeOnUIThread(this);
}
public void DashboardView() => ActivateItemAsync(new DashboardViewModel());
public void GcsImportView() => ActivateItemAsync(IoC.Get<GcsImportViewModel>());
public void GcsExportView() => ActivateItemAsync(new GcsExportViewModel());
public void ChangeView<T>() => ActivateItemAsync(IoC.Get<T>());
//public Task HandleAsync(GcsImportProgressViewModel message, CancellationToken cancellationToken)
//{
// throw new NotImplementedException();
//}
}
}
用户控件构造函数
public GcsImportViewModel(ShellViewModel shell, IGcsRepository gcsRepository/)
{
filePath = "Bitte GCS Excel Datei auswählen";
databases = new ObservableCollection<GcsTable>(gcsRepository.GetAllTables());
selectedDatabase = databases.FirstOrDefault();
this.gcsRepository = gcsRepository;
}
Usercontrol 方法改变视图
public void ClickImport()
{
shell.ChangeView<GcsImportProgressViewModel>();
}
您似乎在 ShellViewModel
的另一个实例上调用 ChangeView
。
您应该在引导程序中将视图模型注册为单例:
container.Singleton<ShellViewModel, ShellViewModel>();
描述
我在版本 4 中使用 Caliburn.Micro 并尝试从一个用户控件导航到另一个页面。 ShellView.xaml 有一个 <ContentControl x:Name="ActiveItem" />
元素和所有导航方法,如 DashboardView()
、GcsImportView()
... 只要我在 ShellView.xaml 内就可以工作。但是,如果我从用户控件(在 ContentControl 内部)调用,则什么也不会发生。我什至没有得到错误。我可以按下按钮 thousend 次而没有任何反应。我希望有人能在这里帮助我。
更新
即使我尝试使用这些 site 中的代码,它也不起作用。在调试时,ActiveItem 值将被更改。这看起来像是一个错误?
ShellViewModel.cs
namespace GCS.ViewModels
{
public class ShellViewModel : Conductor<object>//, IHandle<GcsImportProgressViewModel>
{
private string _version = "v. " + Assembly.GetExecutingAssembly().GetName().Version.ToString();
public string Version
{
get { return _version; }
}
public ShellViewModel(/*IEventAggregator eventAggregator*/)
{
DashboardView();
//eventAggregator.SubscribeOnUIThread(this);
}
public void DashboardView() => ActivateItemAsync(new DashboardViewModel());
public void GcsImportView() => ActivateItemAsync(IoC.Get<GcsImportViewModel>());
public void GcsExportView() => ActivateItemAsync(new GcsExportViewModel());
public void ChangeView<T>() => ActivateItemAsync(IoC.Get<T>());
//public Task HandleAsync(GcsImportProgressViewModel message, CancellationToken cancellationToken)
//{
// throw new NotImplementedException();
//}
}
}
用户控件构造函数
public GcsImportViewModel(ShellViewModel shell, IGcsRepository gcsRepository/)
{
filePath = "Bitte GCS Excel Datei auswählen";
databases = new ObservableCollection<GcsTable>(gcsRepository.GetAllTables());
selectedDatabase = databases.FirstOrDefault();
this.gcsRepository = gcsRepository;
}
Usercontrol 方法改变视图
public void ClickImport()
{
shell.ChangeView<GcsImportProgressViewModel>();
}
您似乎在 ShellViewModel
的另一个实例上调用 ChangeView
。
您应该在引导程序中将视图模型注册为单例:
container.Singleton<ShellViewModel, ShellViewModel>();