- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在这个线程中:Can anybody provide any simple working example of the Conductor<T>.Collection.AllActive usage?我已经得到了部分答案,但我仍然很困惑。
我只想将我所有的 View 模型引用到我的 ShellViewModel 中,以便能够打开/关闭 ContentControls,但无需将它们全部注入(inject)构造函数中。
在回答中,建议在ShellViewModel的构造函数中注入(inject)一个接口(interface)。如果我这样做,我是否必须将所有 ViewModel 注入(inject)实现该接口(interface)的类中?
public MyViewModel(IMagicViewModelFactory factory)
{
FirstSubViewModel = factory.MagicallyGiveMeTheViewModelIWant();
SecondSubViewModel = factory.MagicallyGiveMeTheViewModelIWant();
ThirdSubViewModel = factory.MagicallyGiveMeTheViewModelIWant();
Items.Add(FirstSubViewModel);
Items.Add(SecondSubViewModel);
Items.Add(ThirdSubViewModel);
}
<ContentControl x:Name="Header"
Grid.ColumnSpan="3"/>
<ContentControl x:Name="Menu"
Grid.Row="1"/>
<ContentControl x:Name="Main"
Grid.ColumnSpan="3"/>
public Screen Menu { get; private set; }
public Screen Header { get; private set; }
public Screen Main { get; private set; }
Menu = Items.FirstOrDefault(x => x.DisplayName == "Menu");
Header = Items.FirstOrDefault(x => x.DisplayName == "Header");
Main = Items.FirstOrDefault(x => x.DisplayName == "Landing");
foreach (var screen in GetChildren())
{
Items.Add(screen);
}
最佳答案
最后,我自己设法找到了答案。这一切都在 AppBootstrapper 中!
我最终为我的屏幕创建了一个 ViewModelBase,以便它们都可以具有 IShell 属性(以便 ViewModel 可以触发 ShellViewModel 中的导航),如下所示:
public class ViewModelBase : Screen
{
private IShell _shell;
public IShell Shell
{
get { return _shell; }
set
{
_shell = value;
NotifyOfPropertyChange(() => Shell);
}
}
}
container.Singleton<ViewModelBase, SomeViewModel>();
container.Singleton<ViewModelBase, AnotherViewModel>();
container.Singleton<ViewModelBase, YetAnotherViewModel>();
IEnumerable<ViewModelBase> listScreens = GetAllScreenInstances();
container.Instance<IShell>(new ShellViewModel(listScreens));
foreach (ViewModelBase screen in listScreens)
{
screen.Shell = GetShellViewModelInstance();
}
protected IEnumerable<ViewModelBase> GetAllScreenInstances()
{
return container.GetAllInstances<ViewModelBase>();
}
protected IShell GetShellViewModelInstance()
{
var instance = container.GetInstance<IShell>();
if (instance != null)
return instance;
throw new InvalidOperationException("Could not locate any instances.");
}
public ShellViewModel(IEnumerable<ViewModelBase> screens )
{
Items.AddRange(screens);
}
关于mvvm - ShellViewModel Caliburn.Micro 中的 ViewModels 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37882205/
在这个线程中:Can anybody provide any simple working example of the Conductor.Collection.AllActive usage?我已
我卡住了! 我正在使用 Caliburn.micro消除一些实现的痛苦 MVVM在WPF应用。 目前我只有一个 View/ViewModel,但将来可能会有多个 ViewModel。当前的 ViewM
我是一名优秀的程序员,十分优秀!