Prism Step4 ViewModelLocationProvider

Prism Step4 ViewModelLocationProvider

ViewModel 是对应的 View(数据和行为)的抽象,View 只是 ViewModel 的一个消费者,那么还有其他的消费者吗?当然有了,那就是单元测试(Unit Test),这个后面说。ViewModel 为 View 提供数据上下文(DataContext),简单的说,你 View 需要展示的东西,都在我这里,你需要跟我绑定,包括数据和命令,Prism 提供了自动的 ViewModel 匹配。

阅读更多

Prism Step3 CustomRegions

Prism系列的第三篇,我的更新速度也是有点慢,大家凑活看吧,这一片主要讲自定义占位符的使用,Regions是定义在应用UI中的逻辑占位符(在Shell或者在其它的视图中),视图会在其中显示。简单的说,就是一个容器(区域适配器),用来装载Views。功能和Panel控件差不多。视图可以以编程的方式或者自动被显示在Region中。

阅读更多
Prism Step2 Regions

Prism Step2 Regions

Prism 可以帮助我们开发模块化程序,将程序分割成一个个独立的 Module,分别进行开发。然后在程序运行的时候,将各个 Module 组合到一起,为程序提供各种各样的功能。通常来说,Module 是一些视图和功能的集合,那么就需要一种办法来将这些视图以某种形式,在特定的时间展现出来。Prism 通过 Shell + Region 来组织视图的布局,完成视图间的转换等。

阅读更多
Xamarin Android ListView

Xamarin Android ListView

之前写 WPF 的时候,自定义 ListView 可以非常轻松的就实现,无论是通过DataTemplate还是 ItemTemplate都可以达到预期效果,但是 Xamarin Android 就比较复杂了。

阅读更多

WPF 进阶 - Fody PropertyChanged

相信每一个WPF开发工程师都会遇到这样一个问题,将业务转换成业务模型(Model)以后,就需要用相应的视图(VIEW)和视图模型(ViewModel)展示和交互,那么MVVM模式下就必然要做一个头疼的事情,那就是封装响应变化通知的CLR属性,顶级接口为:INotifyPropertyChanged

阅读更多
WPF MarkupExtension 实践

WPF MarkupExtension 实践

我们首先来回顾一下上一篇中 MarkupExtension 的一些基础的概念,首先当然是 XAML 了,XAML 全称是 Extensible Application Markup Language (可扩展应用程序标记语言),是专门用于 WPF 技术中的 UI 设计语言,通过使用 XAML 语言,我们能够快速设计软件界面,同时能够通过绑定这种机制能够很好地实现界面和实现逻辑之间的解耦,这个就是 MVVM 模式的核心了。

阅读更多

WPF MarkupExtension 原理

存在一些不是特定于XAML的WPF实现的标记扩展,而是XAML作为语言的内在函数或特征的实现。这些标记扩展在System.Xaml程序集中实现,作为一般.NET Framework XAML服务的一部分,并且位于XAML语言XAML命名空间内。在Xaml中为某个对象以Attribute的方式设置对象的属性时,attribute的值默认只能是字符串。

阅读更多

Prism Step1 BootstrapperShell

BootstrapperShell 是 Prism 很重要的理念之一,调用 Bootstrapper 类进行程序主窗体的引导和构造,每一个基于 Prism 架构的应用,都将通过这个基类开始。

阅读更多

依赖属性解析

Windows Presentation Foundation (WPF) 提供了一组服务,这些服务可用于扩展公共语言运行时 (CLR) 属性的功能,这些服务通常统称为 WPF 属性系统。由 WPF 属性系统支持的属性称为依赖项属性,虽然不清楚依赖属性,但是属性我们是很清楚的,封装类的字段,表示类的状态,编译后被转化为get_set_方法,可以被类或结构等使用,常见的一个属性如下:

阅读更多

DependencyProperty 属性之事件

依赖属性提供一种全局内部属性存储来在运行时支持应用内的所有依赖属性,从而扩展基本的 Windows 运行时属性功能。这种方法可以替代为具有专用字段的属性(在属性定义类中为专用)提供支持的标准模式。你可以将此内部属性存储视为任何特定对象的一组属性标识符和值(只要该对象是 DependencyObject 即可)。属性存储中的每个属性均通过 DependencyProperty 实例(而不是通过名称)进行标识。但是,大多数情况下,属性系统会隐藏该实现详细信息:你可以使用简单名称频繁访问依赖属性

阅读更多