随笔分类 - Prism Sample
解析Prism Wpf Sample
摘要:prism使用导航功能的时候,跳了几个坑,记录一下。 1、导航记录的产生,是在区域导航过程中产生的。 _regionManager.Regions[PrismManager.MainViewRegionName].RequestNavigate(obj.NameSpace, back => { jo
阅读全文
摘要:一下子跳到29,不是我的错,应该是新版本中去掉了一些过重的功能,案例就也去掉了,所以不是我的错。 本例是演示行为转命令的,事实上前面已经用到了。 xmlns:i="http://schemas.microsoft.com/xaml/behaviors" <i:Interaction.Triggers
阅读全文
摘要:本例是在上一案例中导航参数的基础上增加了导航的历史记录功能,就是向前向后的功能。 导航本身很简单,以下代码就实现了: public void OnNavigatedTo(NavigationContext navigationContext) { _journal = navigationConte
阅读全文
摘要:在导航中跳转时,视图是缓存的。如果要求某视图在离开后就销毁,需要实现 public class ViewAViewModel : BindableBase, INavigationAware, IRegionMemberLifetime { public bool KeepAlive=>false;
阅读全文
摘要:导航到一个视图,如果在离开这个视图时需要确认,在VM中实现以下接口 public class ViewAViewModel : BindableBase, IConfirmNavigationRequest { public ViewAViewModel() { } public void Conf
阅读全文
摘要:这个例子是说明导航中传递参数,类似Asp.net中实现。 例子的模板,是例16中使用regionContext实现过的。在例16中, <Grid x:Name="LayoutRoot" Background="White" Margin="10"> <Grid.RowDefinitions> <Ro
阅读全文
摘要:上一个例子介绍了INavigationAware中的OnNavitationTo,这次是第二个实现函数。 IsNavitationTarget,这个名字有点误导,真实的作用是,当从其它页面导航至本页面的时候,首先会调用IsNavigationTarget,IsNavigationTarget返回一个
阅读全文
摘要:Navigation Participation,不知翻译方法,意思是对导航过程的参与,触发事件,类似离开导航目标和进入导航的回调 在VM中,增加一个接口 ,然后实现导航事件 public class ViewAViewModel : BindableBase, INavigationAware {
阅读全文
摘要:同17相比,在导航方法中增加了回调函数 private void Navigate(string navigatePath) { if (navigatePath != null) _regionManager.RequestNavigate("ContentRegion", navigatePat
阅读全文
摘要:本例是基础的导航应用 在窗口中布局了2个按钮,一个区域 <DockPanel LastChildFill="True"> <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="5" > <Button Command="{
阅读全文
摘要:终于发现一个有趣的新知识了。 本例的核心是RegionContext,意思是一个区域的上下文。但与DataContext似乎并不相同。 先看一下整体思路。 在主窗体上只有一个Region: <Grid> <ContentControl prism:RegionManager.RegionName="
阅读全文
摘要:例14演示了怎样事件聚合器怎样发布与接收信息。 例15增加了一个事件的过滤功能,即设定一个条件,符合的才接收。 _ea.GetEvent<MessageSentEvent>().Subscribe(MessageReceived, ThreadOption.PublisherThread, fals
阅读全文
摘要:这次是事件聚合器的应用。 事件聚合器应用第一步:定义一个事件聚合器,应该是一个可访问的公共区域,例14为它做了一个core的项目。代码很简单: using Prism.Events; namespace UsingEventAggregator.Core { public class Message
阅读全文
摘要:本例和12的唯一区别,仅仅是在ViewModel中增加了一个IActiveAware,这决定了只有在Acitve状态的视图中才会执行自己ViewModel中的命令。
阅读全文
摘要:本例中,主页是一个按钮,绑定了一个复合命令,然后下面一个TabControl <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*" /> </Grid.RowDefinitions>
阅读全文
摘要:本例的知识点,全在ViewModel中,看代码: 1 public class MainWindowViewModel : BindableBase 2 { 3 private bool _isEnabled; 4 public bool IsEnabled 5 { 6 get => _isEnab
阅读全文
摘要:作用同上节,这里是用修改注册的方式自定义View和ViewModel的关联。 protected override void ConfigureViewModelLocator() { base.ConfigureViewModelLocator(); // type / type //ViewMo
阅读全文
摘要:上个例子跳过了ViewModelLocator,因是采用约定的方式最为方便。 如果有人要修改约定,自定义view和viewModel的默认自动定位方式,怎么办呢? 在app.xaml.cs重写以下方法: protected override void ConfigureViewModelLocato
阅读全文
摘要:这一例只是说明ViewModelLocator的使用,没有难度,跳过。
阅读全文
摘要:这一节使用xaml标记甚为不解。 本节注册module 的方式同directory一节很类似。在那一节中,用工厂方法创建一模块目录: protected override IModuleCatalog CreateModuleCatalog() { return new DirectoryModul
阅读全文