我对Prism相当新,我目前正在使用Prism作为概念证明项目重写我们现有的一个应用程序.
该应用程序使用MVVM和ViewModel第一种方法:我们的ViewModel由容器解析,IViewResolver服务计算出它应该连接到哪个视图(使用名称约定等).
此时代码(向选项卡控件添加视图)看起来像这样:
var vm = (get ViewModel from somewhere)
IRegion reg = _regionManager.Regions["MainRegion"];
var vw = _viewResolver.FromViewModel(vm); // Spins up a view and sets its DataContext
reg.Add(vw);
reg.Activate(vw);
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但我真的很喜欢使用Prism导航框架为我做所有这些事情,这样我就可以这样做:
_regionManager.RequestNavigate(
"MainRegion",
new Uri("NameOfMyViewModel", UriKind.Relative)
);
Run Code Online (Sandbox Code Playgroud)
并让Prism旋转ViewModel + View,设置DataContext并将视图插入该区域.
通过创建引用ViewModel类型的DataTemplates,我获得了一些成功,例如:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Module01">
<DataTemplate DataType="{x:Type local:TestViewModel}">
<local:TestView />
</DataTemplate>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)
...并且在模块初始化时让模块将相关的资源字典添加到应用程序资源中,但这看起来有点垃圾.
有没有办法从Prism有效地接管视图创建,以便在RequestNavigate调用时我可以查看提供的内容Uri并根据它调整视图/视图模型?有一个重载RegionManager.RegisterViewWithRegion,需要一个代表,允许你自己提供一个视图,我想我是在经历这样的事情.
我想我可能需要提供自己的IRegionBehaviorFactory,但我不确定所涉及的是什么(或者即使我走在正确的道路上!).
任何帮助赞赏!
- 注意:最初发布在prism codeplex网站上
我有一个基本布局的窗口:
<Window x:Class="GridStuffs.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Button Grid.Row="0" Click="TopButtonClick" VerticalAlignment="Stretch">Top</Button>
<Button Grid.Row="1" Name="_bottomButton">Bottom</Button>
</Grid>
Run Code Online (Sandbox Code Playgroud)
这只是显示两个按钮"顶部"和"底部",每个按钮在窗口中占据相同的垂直空间.
单击顶部按钮执行以下操作:
private void TopButtonClick(object sender, RoutedEventArgs e)
{
if (_bottomButton.Visibility == Visibility.Collapsed)
{
_bottomButton.Visibility = Visibility.Visible;
}
else
{
_bottomButton.Visibility = Visibility.Collapsed;
}
}
Run Code Online (Sandbox Code Playgroud)
...切换折叠和可见之间的底部按钮的Visibity.
我想要发生的是当顶部按钮折叠时,顶部按钮调整大小以填充窗口.实际发生的是隐藏了底部按钮,但顶部按钮保留了原始尺寸.
问题:当底部按钮折叠时,我需要做什么wpf/xaml魔术才能让顶部按钮展开以填充窗口?