【发布时间】:2014-02-26 18:49:32
【问题描述】:
我进行了一些搜索,但找不到遇到我特定问题的人。
我有一个 Caliburn.Micro 项目,并且我成功地拥有了一个主视图,其中包含子视图,这不是问题。我的视图模型与我的视图在不同的程序集中。
这意味着我必须重写 SelectAssemblies 以包含我的视图模型项目:
protected override IEnumerable<Assembly> SelectAssemblies()
{
var assemblies = base.SelectAssemblies().ToList();
assemblies.Add(typeof(OrderViewModel).Assembly);
return assemblies;
}
现在,这就是我的困惑开始的地方。我成功地有一个显示 OrderViewModel 的 OrderView。里面有一个带有 KeyboardView 的 KeyboardViewModel。这一切都很好,所以 caliburn 正在寻找合适的组件等。
但是,当我开始使用窗口管理器来显示一个新的视图/视图模型时,它会被传递到订单视图中。我得到一个带有文本“无法找到 XX.ViewModels.Model 的视图模型”的屏幕。
这是我的 OrderViewModel
[Export(typeof(OrderViewModel))]
public class OrderViewModel : Screen
{
private readonly IWindowManager windowManager;
private ISession session;
[ImportingConstructor]
public OrderViewModel(IWindowManager windowManager, KeyboardViewModel keyboardViewModel)
{
TillDatabase.CreateInstance(ApplicationConfiguration.Instance.DatabaseConnectionString);
this.windowManager = windowManager;
this.Keyboard = keyboardViewModel;
this.Keyboard.Order = this;
this.Keyboard.Home();
}
public void ChangePriceBand()
{
windowManager.ShowWindow(new PriceBandSelectionViewModel(this));
}
}
问题是,我什至在 ChangePriceBand 中尝试过这个
windowManager.ShowWindow(new OrderViewModel(this.windowManager, new KeyboardViewModel()));
这会得到同样的错误。即使之前已经将视图与 OrderViewModel 关联了!!
这是 PriceBandSelectionViewModel 以防万一。
[Export(typeof(PriceBandSelectionViewModel))]
public class PriceBandSelectionViewModel : Screen
{
private OrderViewModel order;
[ImportingConstructor]
public PriceBandSelectionViewModel(OrderViewModel order)
{
this.order = order;
}
public ObservableCollection<PriceBandButtonViewModel> Buttons
{
get
{
var list = new ObservableCollection<PriceBandButtonViewModel>();
var priceBands = this.order.Session.QueryOver<Application_Model_PriceBand>().List();
foreach (var priceBand in priceBands)
{
PriceBandButtonViewModel button = new PriceBandButtonViewModel(priceBand, this);
list.Add(button);
}
return list;
}
}
public void ProcessButtonClick(Application_Model_PriceBand button)
{
this.order.ChangeCurrentPriceBand(button);
base.TryClose();
}
}
我真的很困惑 Caliburn 如何设置我的主视图,但窗口管理器不是即使它是相同的 ViewModel?
【问题讨论】:
标签: c# wpf mvvm caliburn.micro caliburn