基于Prism.Windows的UWP开发备忘

总计七:菜单设置时机

public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new MainWindowViewModel();
        }
protected override void OnLaunched(LaunchActivatedEventArgs e)
        {
            Frame rootFrame = Window.Current.Content as Frame;

            // 不要在窗口已包含内容时重复应用程序初始化,
            // 只需确保窗口处于活动状态
            if (rootFrame == null)
            {
                // 创建要充当导航上下文的框架,并导航到第一页
                rootFrame = new Frame();

                rootFrame.NavigationFailed += OnNavigationFailed;

                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
                {
                    //TODO: 从之前挂起的应用程序加载状态
                }

                // 将框架放在当前窗口中
                Window.Current.Content = rootFrame;
            }

            if (e.PrelaunchActivated == false)
            {
                if (rootFrame.Content == null)
                {
                    // 数据库创建
                    createDBAsync();
                    // 当导航堆栈尚未还原时,导航到第一页,
                    // 并通过将所需信息作为导航参数传入来配置
                    // 参数
                    rootFrame.Navigate(typeof(MainPage), e.Arguments);
                }
                // 确保当前窗口处于活动状态
                Window.Current.Activate();
            }
        }

        Task createDBAsync()
        {
            // 略
            return Task.FromResult(true);
        }

上述只是简陋的MVVM架构,只是帮忙领悟,而在其实的类别中,大家没须要再去编写NotificationObject及DelegateCommand那多少个类,大家能够援用Prisim中的类就可以,在档案的次序中投入Microsoft.Practices.Prism.dll,NotificationObject 援用 using Microsoft.Practices.Prism.ViewModel;DelegateCommand援用using Microsoft.Practices.Prism.Commands;

总结三:NavigationService

在代码隐蔽中投入

protected override Task OnInitializeAsync(IActivatedEventArgs args)

<TextBox Text="{Binding Name}" />
<Button Content="Save" Command="{Binding SaveCommand}" />

MVVM全称:Model-View-ViewModel

2,ViewPage类型设置

亮点:MVVM的引进使程序完毕了松耦合设计,UI层与专业逻辑能够相互设计

1、Model:对具体世界的空洞

譬喻:须要做一个学院的管住体系,高校饱含学生和导师,此时得以把老师和学酱油象成老师类及学生类。

教员职员和工人类:具有教学及备课等属性

学员类:具有学习的性质

将这么些无疑的求实事物抽象成类。Model层恒久不晓得View层的留存。

2、ViewModel:对View层的肤浅

抑或以母校为例:在View分界面上有要求体现老师的真名、性别、教的怎么样课程,彰显学生的姓名、性别、年龄、年级,此时能够将那一个抽象成现实的ViewModel模型,饱含老师及学生要展现的性质以及命令。

表明:属性须求持有通告UI更新的技术,即ViewModel要继续:NotificationObject类。

属性:落成接口INotifyPropertyChanged,自动和UI层交互。

会集:它的档案的次序一般是ObservableCollection,因而,任何UI成分绑定到它,不管这一个集合何时更动,都得以活动的与UI交互。

命令:要继承ICommand接口。

为了知道MVVM,上边四个总结的例证:

(a)、实现NotificationObject类:

public class NotificationObject : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;


public void RaisePropertyChanged(string propertyName) { if (this.PropertyChanged != null) { this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }

(b)、实现DelegateCommand类

class DelegateCommand : ICommand
    {
        public bool CanExecute(object parameter)
        {
            if (this.CanExecuteFunc == null)
            {
                return true;
            }


return this.CanExecuteFunc(parameter); }
public event EventHandler CanExecuteChanged;
public void Execute(object parameter) { if (this.ExecuteAction == null) { return; } this.ExecuteAction(parameter); }
public Action ExecuteAction { get; set; } public Func CanExecuteFunc { get; set; } }

(c)、实现ViewModel类

class MainWindowViewModel : NotificationObject
    {
        private double _name;


public double Name { get { return _name; } set { _name = value; this.RaisePropertyChanged("Name"); } }
public DelegateCommand SaveCommand { get; set; }
private void Save(object parameter) { this.Name += "保存";

            SaveFileDialog dlg = new SaveFileDialog();
            dlg.ShowDialog();
        }


public MainWindowViewModel() { this.SaveCommand = new DelegateCommand(); this.SaveCommand.ExecuteAction = new Action(this.Save); }

3、View:UI层

1,App.cs内部选择。(类以及含有NavigationService成员属性):

 

ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver(
    viewType => {

4,.net native相关的Default.rd.xml设置

出于开采成效考虑,以往筹算都应用Prism或然Template10付出,当中大多的达成原理与MvvmLight相似。此番根据Prism.Windows完成的UWP应用固然效果不是那么复杂,但是多数用全了Prism的出色性状,特写下一次篇做备忘。

}

2,ViewModel使用。

3,ViewModel中数量成员属性设置

Container.RegisterInstance<IResourceLoader>(new ResourceLoaderAdapter(new ResourceLoader()));

3,控件绑定

        // 自由设置
        return Type.GetType("");
    });

 
<TextBox Text="{Binding Name, Mode=TwoWay}" Header="Name" /> 

<TextBlock Text="{Binding Errors[Name][0]}" Foreground="Red" HorizontalAlignment="Right" />

 

<ItemsControl x:Name="ErrorList" ItemsSource="{Binding Errors.Errors}" />

 
public class Address : 
protected override Task OnInitializeAsync(IActivatedEventArgs args)
        {
            createDBAsync();
            return base.OnInitializeAsync(args);
        }

 

备考:通过持续ValidationAttribute 能够自定义各类注明逻辑。

UWP开辟之Mvvmlight推行四:{x:bind}和{Binding}差别详解

    Container.RegisterType<ISettingService, SettingService>(new ContainerControlledLifetimeManager());

2,成员设置:

private INavigationService _navigationService; 
public HomePageViewModel(INavigationService navigationService)
{     _navigationService = navigationService;
}

 

全体接口:

依附注入

着力就那几个东西,计算一下利于未来开辟,同偶尔候也期待对园友们有帮助。

[Required(ErrorMessage = "Name is required.")]
public string Name
{
    get { return name; }
    set { SetProperty(ref name, value); }
}

[RegularExpression(@"[ABCD]d{2,5}", ErrorMessage="Location is Quadrant (A -> D) and Sector (2 -> 5 digits)")]
public string Location
{
    get { return location; }
    set { SetProperty(ref location, value); }
}

 

View名:HomePage

                viewName = viewName.Replace(".Views.", ".ViewModels.");

注意:

                var suffix = viewName.EndsWith("View") ? "Model" : "ViewModel";

2,看重注入。(最棒全部的流入都写在那些点子里面,后续的启航管理以及页面转移等得以马上采取。)

protected override void OnRegisterKnownTypesForSerialization()
{
SessionStateService.RegisterKnownType(typeof(FavoriteInfo));
SessionStateService.RegisterKnownType(typeof(ServerInfo));
 // 这个比较重要
SessionStateService.RegisterKnownType(typeof(ObservableCollection<FavoriteInfo>));
}

小结一:IOC调控反转容器

        public MenuViewModel(INavigationService navigationService, 

2,调用GetString()获取数据。

 

private ObservableCollection<FavoriteInfo> _favoriteFolders;
[RestorableState]
public ObservableCollection<FavoriteInfo> FavoriteFolders
{     

  get     {         return _favoriteFolders;     }     

  set     {         SetProperty(ref _favoriteFolders, value);     }
}

 

选择格局:1,继承与ValidatableBindableBase

        protected override UIElement CreateShell(Frame rootFrame)
        {
            var menuPage = Container.Resolve<MenuPage>();
            menuPage.NavigationFrame.Content = rootFrame;
            return menuPage;
        }

 

UWP开荒之Mvvmlight推行三:轻易MVVM实例开荒(图像和文字详解付代码)

Prism.Mvvm下ViewModelLocationProvide.cs的暗中同意设置如下:
        static Func<Type, Type> _defaultViewTypeToViewModelTypeResolver =

  • Required
  • CreditCard
  • EmailAddress
  • PhoneNumber
  • Range
  • MinLength
  • MaxLenght
  • RegularExpression
  • Enumeration
  • URL

现阶段只援助Unity,SimpleInjector,Autofac四个,比较MvvmCross大概Mvvmlight框架则采取更灵敏。

临近Asp.net MVC支持以下Validation:

总计六:属性验证Validatable

                var viewModelName = String.Format(CultureInfo.InvariantCulture, "{0}{1}, {2}", viewName, suffix, viewAssemblyName);

1,App类承接于IOC对应的Application类。

protected override Task OnInitializeAsync(IActivatedEventArgs args)
{
    Container.RegisterInstance<ISessionStateService>(SessionStateService);

UWP开采之Mvvmlight施行八:为啥事件注销管理要写在OnNavigatingFrom中

        private INavigationService _navigationService;

        public HomePageViewModel(INavigationService navigationService)
        {
            _navigationService = navigationService;
        }

 

_navigationService.ClearHistory()等

 

                return Type.GetType(viewModelName);

                var viewName = viewType.FullName;

// 启动页面表示

NavigationService.Navigate("Home", null);

UWP开荒之Mvvmlight执行九:基于MVVM的项目架构分享

            };

 

小结二:自动绑定

UWP开拓之Mvvmlight施行七:怎么样搜索设备(Mobile模拟器、实体手提式有线电话机、PC)中利用的Log等文件

有了它再也不用担忧一些破例的页面漂移难点。

ViewModel名:HomePageViewModel

 resourceLoader)

        {

            _navigationService = navigationService;

            Commands = new ObservableCollection<MenuItemViewModel>

            {

                new MenuItemViewModel { DisplayName = resourceLoader.GetString("MainPageMenuItemDisplayName"), FontIcon = "ue15f", Command = new DelegateCommand(NavigateToMainPage, CanNavigateToMainPage) },

                new MenuItemViewModel { DisplayName = resourceLoader.GetString("SecondPageMenuItemDisplayName"), FontIcon = "ue19f", Command = new DelegateCommand(NavigateToSecondPage, CanNavigateToSecondPage) }

            };

        }

只要View与ViewModel分层了,通过自定义ViewModelTypeResolver也得以兑现机关绑定。

  • ViewModel内使用:

由于10,11 的笔录保留与回复都以使用DataContractSerializer种类化,所以页面漂移参数最棒使用字符串可能数字。

App.cs内部的CreateShell方法中安装:

    return base.OnInitializeAsync(args);
}

IResourceLoader

UWP开采之Mvvmlight实行一:怎么样在项目中丰盛应用Mvvmlight(图像和文字详解)

  1. bool Navigate(string pageToken, object parameter);
  2. void GoBack();
  3. bool CanGoBack();
  4. void GoForward();
  5. bool CanGoForward();
  6. void ClearHistory();
  7. void RemoveFirstPage(string pageToken = null, object parameter = null);
  8. void RemoveLastPage(string pageToken = null, object parameter = null);
  9. void RemoveAllPages(string pageToken = null, object parameter = null);
  10. void RestoreSavedNavigation();
  11. void Suspending();

1,App.cs内部安装

先前做UWP开采都以使用MvvmLight,首假使粗略易上手,同期也写了成千上万MvvmLight的开垦种类文章:

UWP开拓之Mvvmlight实践五:SuspensionManager中断挂起以及复原管理

  • App.cs内调用:

总结五:ResourceLoader

其次Views与ViewModels文件夹最佳在同三个顺序集下,然后View的底部增多如下两行代码,就能够自动绑定ViewModel。

<Type Name="PrismUnityApp1.DataModels.FavoriteInfo" 
DataContractSerializer="Required Public" />        

<Namespace Name="System.Collections.ObjectModel" >        

  <TypeInstantiation Name="ObservableCollection"  Arguments="PrismUnityApp1.DataModels.FavoriteInfo"
DataContractSerializer="Required Public" />     

</Namespace>

 

return base.OnInitializeAsync(args);

    return base.OnInitializeAsync(args);
}

{

 

<prismMvvm:SessionStateAwarePage

 x:Class="PrismUnityApp1.Views.SettingPage"
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:prismMvvm="using:Prism.Windows.Mvvm"
prismMvvm:ViewModelLocator.AutoWireViewModel="True"

mc:Ignorable="d">

 
 

机关绑定的命名准则:

            {

await Container.Resolve<IAppStartupService>().CreateDataBaseAsync();

protected override Task OnInitializeAsync(IActivatedEventArgs args)
{
    Container.RegisterInstance<INavigationService>(NavigationService);
    Container.RegisterInstance<ISessionStateService>(SessionStateService);

起初笔者们一般都以在OnLaunched方法内部加多如下代码完成:

 

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
prism:ViewModelLocator.AutowireViewModel="True"
Title="MainPage">
  <StackLayout HorizontalOptions="Center" VerticalOptions="Center">
    <Label Text="{Binding Title}" />
  </StackLayout>
</ContentPage>

UWP开荒之Mvvmlight实行六:MissingMetadataException化解办法(.Net Native下Default.rd.xml配置难题)

是因为Prism封装了Application类,所以代码增加的职位也变了:

UWP开辟之Mvvmlight奉行二:Mvvmlight的主干框架MVVM与MVC、MVP的区分(图像和文字详解)

                var viewAssemblyName = viewType.GetTypeInfo().Assembly.FullName;

类型注册

运用办法(譬喻:Unity):

SessionStateService是近似SuspensionManager特地管理搁浅。

 1,重视注入。

ValidatableBindableBase

 

小结四:中断还原管理

            viewType =>

小结八:数据库成立机会

UWP开荒必备以及常用知识点总计

sealed partial class App : PrismUnityApplication
    {}

3,调用。

本文由开元棋牌发布于数据库,转载请注明出处:基于Prism.Windows的UWP开发备忘

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。

数据库 服务器&运维 办公软件 操作系统 标签 网站地图 xml地图

开元棋牌-kg开元棋牌-开元棋牌漏洞

开元棋牌是一款专门为喜爱斗地主等游戏玩家而打造的一款手机游戏平台,在kg开元棋牌平台上你可以自由的体验到自己喜爱的游戏,包括斗地主、牛牛等,每一款游戏都进行了全面的优化,流畅的手感以及公平的对战规则,喜欢开元棋牌漏洞的玩家赶快下载体验吧。

Copyright © 2002-2017 开元棋牌 All Rights Reserved