我已经进行了一些搜索,但是找不到与我的特定问题有关的任何人。

我有一个Caliburn.Micro项目,并且在其中成功拥有一个带有 subview 的主 View ,这不是问题。我的 View 模型与我的 View 位于不同的程序集中。

这意味着我必须重写SelectAssemblies才能包含我的 View 模型项目:

protected override IEnumerable<Assembly> SelectAssemblies()
    {
        var assemblies = base.SelectAssemblies().ToList();
        assemblies.Add(typeof(OrderViewModel).Assembly);

        return assemblies;
    }

现在,这是我困惑的起点。我成功地拥有一个显示OrderViewModel的OrderView。里面有一个带有KeyboardView的KeyboardViewModel。这一切都很好,因此caliburn正在寻找合适的组件等。

但是,当我开始使用窗口管理器来显示新的 View / View 模型时,该 View / View 模型将传递到订单 View 中。我得到一个带有文本“无法找到XX.ViewModels.Model的 View 模型”的屏幕。

这是我的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()));

并得到相同的错误。即使以前 View 已经与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如何设置我的主 View 感到非常困惑,但是即使窗口管理器具有相同的ViewModel,它也不是吗?

最佳答案

您是否尝试删除OrderViewModel或在其中放置断点,如果在初始化导出的类时遇到错误,则可能找不到 View 错误

public PriceBandSelectionViewModel()
{
    // this.order = order;
}

或添加
assemblies.Add(typeof(PriceBandSelectionViewModel).Assembly);

关于c# - Caliburn.Micro WindowManager找不到 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21524738/

10-12 15:42