新聞中心
概述
此項(xiàng)目平臺(tái)框架:.NET Core 3.1

Prism版本:8.0.0.1909
提示:這些項(xiàng)目都在同一解決方法下,需要依次打開運(yùn)行,可以選中項(xiàng)目-》右鍵-》設(shè)置啟動(dòng)項(xiàng)目,然后運(yùn)行:
目錄介紹
|
Topic |
描述 |
|
Bootstrapper and the Shell |
創(chuàng)建一個(gè)基本的引導(dǎo)程序和shell |
|
Regions |
創(chuàng)建一個(gè)區(qū)域 |
|
Custom Region Adapter |
為StackPanel創(chuàng)建自定義區(qū)域適配器 |
|
View Discovery |
使用視圖發(fā)現(xiàn)自動(dòng)注入視圖 |
|
View Injection |
使用視圖注入手動(dòng)添加和刪除視圖 |
|
View Activation/Deactivation |
手動(dòng)激活和停用視圖 |
|
Modules with App.config |
使用應(yīng)用加載模塊。配置文件 |
|
Modules with Code |
使用代碼加載模塊 |
|
Modules with Directory |
從目錄加載模塊 |
|
Modules loaded manually |
使用IModuleManager手動(dòng)加載模塊 |
|
ViewModelLocator |
使用ViewModelLocator |
|
ViewModelLocator - Change Convention |
更改ViewModelLocator命名約定 |
|
ViewModelLocator - Custom Registrations |
為特定視圖手動(dòng)注冊ViewModels |
|
DelegateCommand |
使用DelegateCommand和DelegateCommand |
|
CompositeCommands |
了解如何使用CompositeCommands作為單個(gè)命令調(diào)用多個(gè)命令 |
|
IActiveAware Commands |
使您的命令I(lǐng)ActiveAware僅調(diào)用激活的命令 |
|
Event Aggregator |
使用IEventAggregator |
|
Event Aggregator - Filter Events |
訂閱事件時(shí)篩選事件 |
|
RegionContext |
使用RegionContext將數(shù)據(jù)傳遞到嵌套區(qū)域 |
|
Region Navigation |
請參見如何實(shí)現(xiàn)基本區(qū)域?qū)Ш?/p> |
|
Navigation Callback |
導(dǎo)航完成后獲取通知 |
|
Navigation Participation |
通過INavigationAware了解視圖和視圖模型導(dǎo)航參與 |
|
Navigate to existing Views |
導(dǎo)航期間控制視圖實(shí)例 |
|
Passing Parameters |
將參數(shù)從視圖/視圖模型傳遞到另一個(gè)視圖/視圖模型 |
|
Confirm/cancel Navigation |
使用IConfirmNavigationReqest界面確認(rèn)或取消導(dǎo)航 |
|
Controlling View lifetime |
使用IRegionMemberLifetime自動(dòng)從內(nèi)存中刪除視圖 |
|
Navigation Journal |
了解如何使用導(dǎo)航日志 |
部分項(xiàng)目演示和介紹
① BootstrapperShell啟動(dòng)界面:
這個(gè)主要演示Prism框架搭建的用法:
step1:在nuget上引用Prsim.Unity。
step2:修改App.xaml:設(shè)置引導(dǎo)程序。
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:BootstrapperShell">
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var bootstrapper = new Bootstrapper();
bootstrapper.Run();
}
}
step3:在引導(dǎo)程序中設(shè)置啟動(dòng)項(xiàng)目。
using Unity;
using Prism.Unity;
using BootstrapperShell.Views;
using System.Windows;
using Prism.Ioc;
namespace BootstrapperShell
{
class Bootstrapper : PrismBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
}
}
}
step4:在MainWindow.xaml中顯示個(gè)字符串。
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Shell" Height="350" Width="525">
②ViewInjection:視圖注冊
MainWindow.xaml:通過ContentControl 關(guān)聯(lián)視圖:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
Title="Shell" Height="350" Width="525">
MainWindow.xaml.cs:鼠標(biāo)點(diǎn)擊后通過IRegion 接口注冊視圖:
public partial class MainWindow : Window
{
IContainerExtension _container;
IRegionManager _regionManager;
public MainWindow(IContainerExtension container, IRegionManager regionManager)
{
InitializeComponent();
_container = container;
_regionManager = regionManager;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var view = _container.Resolve();
IRegion region = _regionManager.Regions["ContentRegion"];
region.Add(view);
}
}
③ActivationDeactivation:視圖激活和注銷
MainWindow.xaml.cs:這里在窗體構(gòu)造函數(shù)中注入了一個(gè)容器擴(kuò)展接口和一個(gè)regin管理器接口,分別用來裝載視圖和注冊regin,窗體的激活和去激活分別通過regions的Activate和Deactivate方法實(shí)現(xiàn)。
public partial class MainWindow : Window
{
IContainerExtension _container;
IRegionManager _regionManager;
IRegion _region;
ViewA _viewA;
ViewB _viewB;
public MainWindow(IContainerExtension container, IRegionManager regionManager)
{
InitializeComponent();
_container = container;
_regionManager = regionManager;
this.Loaded += MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
_viewA = _container.Resolve();
_viewB = _container.Resolve();
_region = _regionManager.Regions["ContentRegion"];
_region.Add(_viewA);
_region.Add(_viewB);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
//activate view a
_region.Activate(_viewA);
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
//deactivate view a
_region.Deactivate(_viewA);
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
//activate view b
_region.Activate(_viewB);
}
private void Button_Click_3(object sender, RoutedEventArgs e)
{
//deactivate view b
_region.Deactivate(_viewB);
}
}
④UsingEventAggregator:事件發(fā)布訂閱
事件類定義:
public class MessageSentEvent : PubSubEvent
{
}
注冊兩個(gè)組件:ModuleA和ModuleB。
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
moduleCatalog.AddModule();
moduleCatalog.AddModule();
}
ModuleAModule 中注冊視圖MessageView:
public class ModuleAModule : IModule
{
public void OnInitialized(IContainerProvider containerProvider)
{
var regionManager = containerProvider.Resolve();
regionManager.RegisterViewWithRegion("LeftRegion", typeof(MessageView));
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
}
}
MessageView.xaml:視圖中給button俺妞妞綁定命令:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True" Padding="25">
MessageViewModel.cs:在vm中把界面綁定的命令委托給SendMessage,然后在方法SendMessage中發(fā)布消息:
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using UsingEventAggregator.Core;
namespace ModuleA.ViewModels
{
public class MessageViewModel : BindableBase
{
IEventAggregator _ea;
private string _message = "Message to Send";
public string Message
{
get { return _message; }
set { SetProperty(ref _message, value); }
}
public DelegateCommand SendMessageCommand { get; private set; }
public MessageViewModel(IEventAggregator ea)
{
_ea = ea;
SendMessageCommand = new DelegateCommand(SendMessage);
}
private void SendMessage()
{
_ea.GetEvent().Publish(Message);
}
}
}
在MessageListViewModel 中接收并顯示接收到的消息:
public class MessageListViewModel : BindableBase
{
IEventAggregator _ea;
private ObservableCollection_messages;
public ObservableCollectionMessages
{
get { return _messages; }
set { SetProperty(ref _messages, value); }
}
public MessageListViewModel(IEventAggregator ea)
{
_ea = ea;
Messages = new ObservableCollection();
_ea.GetEvent().Subscribe(MessageReceived);
}
private void MessageReceived(string message)
{
Messages.Add(message);
}
}
以上就是這個(gè)開源項(xiàng)目比較經(jīng)典的幾個(gè)入門實(shí)例,其它就不展開講解了。
文章名稱:C#一個(gè)基于.NETCore3.1的開源項(xiàng)目幫你徹底搞懂WPF框架Prism
URL鏈接:http://www.dlmjj.cn/article/coopisi.html


咨詢
建站咨詢
