赞
踩
1 新建wpf应用程序
2 添加prism.unity(v8.0)的引用
3 新建Views文件夹讲MainWindow拖到该文件夹中,修改MainWindow.xaml和MainWindow.xaml.cs 注意要修改相关命名空间(3处)
- <Window x:Class="PrismBindingDemo.Views.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:local="clr-namespace:PrismBindingDemo.Views"
- xmlns:prism="http://prismlibrary.com/"
- mc:Ignorable="d"
- Title="MainWindow" Height="450" Width="800" prism:ViewModelLocator.AutoWireViewModel="True">
- <StackPanel>
- <TextBox Text="{Binding Text}" Margin="10" Height="100" FontSize="50" Foreground="Black" BorderBrush="Black"/>
- <Button Height="100" Width="300" Content="Click Me" FontSize="50" Command="{Binding ClickCommnd}"/>
- </StackPanel>
- </Window>
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
-
- namespace PrismBindingDemo.Views
- {
- /// <summary>
- /// MainWindow.xaml 的交互逻辑
- /// </summary>
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- }
- }
- }
4 添加ViewModels文件夹 ,添加类MainWindowViewModel
- using Prism.Commands;
- using Prism.Mvvm;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
-
- namespace PrismBindingDemo.ViewModels
- {
- public class MainWindowViewModel: BindableBase
- {
- private string _text;
- public string Text
- {
- get { return _text; }
- set { SetProperty(ref _text, value); }
- }
-
- private DelegateCommand _clickCommnd;
- public DelegateCommand ClickCommnd =>
- _clickCommnd ?? (_clickCommnd = new DelegateCommand(ExecuteClickCommnd));
-
- void ExecuteClickCommnd()
- {
- this.Text = "Click Me!";
- }
-
- public MainWindowViewModel()
- {
- this.Text = "Hello Prism!";
- }
- }
- }
5 修改App.xaml和App.xaml.cs
- <prism:PrismApplication x:Class="PrismBindingDemo.App"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:local="clr-namespace:PrismBindingDemo"
- xmlns:prism="http://prismlibrary.com/"
- >
- <Application.Resources>
-
- </Application.Resources>
- </prism:PrismApplication>
- using Prism.Unity;
- using System;
- using System.Collections.Generic;
- using System.Configuration;
- using System.Data;
- using System.Linq;
- using System.Threading.Tasks;
- using System.Windows;
- using Prism.Ioc;
- using PrismBindingDemo.Views;
-
- namespace PrismBindingDemo
- {
- /// <summary>
- /// App.xaml 的交互逻辑
- /// </summary>
- public partial class App : PrismApplication
- {
- protected override Window CreateShell()
- {
- return Container.Resolve<MainWindow>();
- }
-
- protected override void RegisterTypes(IContainerRegistry containerRegistry)
- {
-
- }
- }
- }
6 运行
7 以上视图xxx.xaml放在Views目录下,对应的xxxViewModel.cs放在ViewModels目录下是默认设置,如果更改了以上目录则需要在App.xaml.cs中重写ConfigureViewModelLocator()
- protected override void ConfigureViewModelLocator()
- {
- base.ConfigureViewModelLocator();
- ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver((viewType) =>
- {
- var viewName = viewType.FullName.Replace(".Viewsb.", ".ViewModelsa.OhMyGod.");
- var viewAssemblyName = viewType.GetTypeInfo().Assembly.FullName;
- var viewModelName = $"{viewName}Test, {viewAssemblyName}";
- return Type.GetType(viewModelName);
- });
- }
8 自定义ViewModel注册
- using Prism.Commands;
- using Prism.Mvvm;
-
- namespace PrismSample
- {
- public class Foo:BindableBase
- {
-
- private string _text;
- public string Text
- {
- get { return _text; }
- set { SetProperty(ref _text, value); }
- }
-
- public Foo()
- {
- this.Text = "Foo";
- }
-
- private DelegateCommand _clickCommnd;
- public DelegateCommand ClickCommnd =>
- _clickCommnd ?? (_clickCommnd = new DelegateCommand(ExecuteClickCommnd));
-
- void ExecuteClickCommnd()
- {
- this.Text = "Oh My God!";
- }
- }
- }
App.xaml.cs中重写ConfigureViewModelLocator的方法
- protected override void ConfigureViewModelLocator()
- {
- base.ConfigureViewModelLocator();
- ViewModelLocationProvider.Register<MainWindow, Foo>();
- //ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver((viewType) =>
- //{
- // var viewName = viewType.FullName.Replace(".Viewsb.", ".ViewModelsa.OhMyGod.");
- // var viewAssemblyName = viewType.GetTypeInfo().Assembly.FullName;
- // var viewModelName = $"{viewName}Test, {viewAssemblyName}";
- // return Type.GetType(viewModelName);
- //});
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。