WPF Prsim框架(区域)

  1. IoC(Inversion of Control,控制反转):
    IoC 是一种设计模式,它的基本思想是将对象的创建、销毁、依赖关系的维护等控制权从程序代码中转移出去,交由容器来负责管理。在 Spring 中,IoC 容器是负责管理对象之间依赖关系的容器,它负责创建对象、维护对象之间的关系,并在需要时注入依赖。
  2. DI(Dependency Injection,依赖注入):
    DI 是 IoC 的一种具体实现方式,它是指将对象所依赖的其他对象(即依赖)通过构造函数、Setter 方法或其他方式注入到对象中,从而消除了对象之间的耦合关系。在 Spring 中,DI 是通过注解或 XML 配置文件等方式来实现的,它可以使对象之间的依赖关系更加清晰、简单和可维护。

总的来说,IoC 是一种思想,它强调将对象之间的依赖关系的控制权交给容器来管理;DI 则是一种具体的实现方式,它强调将对象所依赖的其他对象通过注入的方式来消除对象之间的耦合关系。在 Spring 中,IoC 和 DI 通常是一起使用的,通过将对象之间的依赖关系注入到容器中,从而实现对象之间的松耦合,使代码更加清晰、简单和易于维护。

Prism框架就是一种解耦思想的体现

区域定义:在Prism当中, 一个页面我们可以不再为其固定显示的内容, 而这种概念变成了区域 (Region)划分的概念。 将页面显示的区域划分称N个Region, 此时, 每个Region将变成了动态分配区域。

与MVVM文章中提到的方法引入Prism

创建如图所示的文件夹,xaml与viewmodel文件,

 页面代码:(注意pageA与PageB是UserControl)

Main.xaml

 <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <WrapPanel>
            <Button Height="50" Width="100" Command="{Binding OpenCommnd}" CommandParameter="PageA"/>
            <Button Height="50" Width="100" Command="{Binding OpenCommnd}" CommandParameter="PageB"/>
            <Button Width="100" Height="40" Command="{Binding BackCommnd}"/>
        </WrapPanel>

        <ContentControl Grid.Row="1" prism:RegionManager.RegionName="con"/>
    </Grid>
<!--prism:RegionManager.RegionName="con" 创建区域化命名-->

PageA.xaml

<Grid>
        <StackPanel>
            <TextBlock Text="{Binding Id}"/>
            <TextBlock Text="{Binding Name}"/>
            <TextBlock Text="{Binding Sex}"/>
        </StackPanel>
    </Grid>

PageB.xaml

<Grid>
        <TextBlock Text="111111"/>
    </Grid>

ViewModel:

MainViewModel

namespace NavagationWpf.ViewModels
{
    public class MainViewModel
    {
        public MainViewModel(IRegionManager regionManager)
        {
           //xaml中绑定的事件
            OpenCommnd = new DelegateCommand<string>(Open); 
           //接收继承此接口的类        
            iRegionManager = regionManager;
        }

        private void Open(string obj)
        {
           //通过命名去寻找后台注册的区域块,并实现跳转
           iRegionManager.Regions["con"].RequestNavigate(obj);                         
        }

        public DelegateCommand<string> OpenCommnd { get; private set; }

       //可读属性,定义一个接口,目的为了接收
       private readonly IRegionManager iRegionManager;

      
    }
}

PageAViewModel

  public class PageAViewModel : BindableBase
    {

        private int id;

        public int Id
        {
            get { return id; }
            set
            {
                id = value;
                RaisePropertyChanged();
            }
        }

        private string name;

        public string Name
        {
            get { return name; }
            set
            {
                name = value;
                RaisePropertyChanged();
            }
        }
        private bool sex;

        public bool Sex
        {
            get { return sex; }
            set
            {
                sex = value;
                RaisePropertyChanged();
            }
        }
        PageAViewModel()
        {
            Id = 0;
        }

PageBViewModel

public class PageBViewModel
    {
         
    }

在app.xaml.cs

namespace NavagationWpf
{
    /// <summary>
    /// App.xaml 的交互逻辑
    /// </summary>
    public partial class App : PrismApplication
    {
        protected override Window CreateShell()
        {
            return Container.Resolve<Main>();
        }
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
//注册usercontrol A
            containerRegistry.RegisterForNavigation<PageA>();
//注册usercontrol B
            containerRegistry.RegisterForNavigation<PageB>();
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉玊则不达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值