我是新手,因此可能是个白痴。那就是说,我希望我的观点是UC还是Windows?我猜这取决于我的使用场景,也许......
我有一个主视图,其中有“按钮”用于不同的操作,例如CreateThis或ModifyThat。当用户点击其中一个“按钮”时,我想在对话框类型场景中显示适当的视图。这个 SEEMS 就像它会成为一个窗口但是我不确定Window Manager如何影响这个。
此外,当我进行Winforms开发时,我制作了所有“视图”UC,我将嵌入一个可重复使用的窗口,以便它们更灵活,是否适用于此处?
有人指出我正确的方向吗?谢谢!
答案 0 :(得分:2)
我假设WPF,因为您提到了Window
而不是ChildWindow
,但通常您想创建UserControls
。
WindowManager
会根据您是否致电ShowPopup
,ShowDialog
或ShowNotification
自动确保您的内容显示在相应的容器中,以便让他们更好地使用灵活(实际上WindowManager
设置WPF应用程序的初始窗口,为您的引导程序启动的任何ViewModel解析视图,并确保在视图不是窗口时创建窗口)
对于复合视图,您需要做的就是将子视图模型作为组合容器的属性(即将托管它们的另一个视图模型)包含在内,并使用ContentControl
和CMs约定绑定它们< / p>
e.g。将显示2个UC的VM可能看起来像:
public class SomeCompositeViewModel : Screen
{
public SomeOtherViewModel SomeOtherView { get; set; } // You probably want INPC here as per usual
public YetAnotherViewModel YetAnotherView { get; set; }
public SomeCompositeViewModel()
{
// Setup as you need - direct instantiation, IoC/DI, use MEF, whatever works for you
SomeOtherView = new SomeOtherViewModel();
YetAnotherView = new YetAnotherViewModel();
}
}
和XAML
<UserControl x:Class="SomeAssembly.Yadda.Yadda.SomeComposititeViewModel">
<StackPanel>
<!-- Bind to SomeOtherViewModel via the SomeOtherView property etc -->
<ContentControl x:Name="SomeOtherView" />
<ContentControl x:Name="YetAnotherView" />
</StackPanel>
</UserControl>
(你的布局会更有创意!)
如果您希望所有项目都有生命周期,您可以使用Conductor<T>.Collection.AllActive
但听起来更像是在寻找复合视图,而不是工具窗口