PDC的新东西很多,今天去听了一个关于 Xaml 新特性以及未来的 Session。
Xaml目前主要用在三个场景,分别是UI,比如WPF Silverlight的展示,Workflow,比如WF,用xaml来定义workflow,以及电子文档比如XPS。
xaml只是去展现一个模型,会有多个Runtime来支持,比如.net 3.0, 3.5, SL 1, SL2
当然任何技术都需要一个工具的支持,目前有VS,Expression。这些是现状。
现在也有一些互相格式转换的工具,比如SVG 到 Xaml,SWF到Xaml等
对于下一个版本,也就是XAML 2009,Xaml 会让你用起来更加的方便,尤其去写一些复杂的模型。目前这个2009CTP版本可以下载了。新的特性有
- x:Reference 的引用,比如
- 以前的版本肯能要这么写来引用一个对象 <TextBox Target={Binding ElementName=infoTextBox} >
- 现在可以直接写<TextBox Target=”InfoTextBox” />
- Mscorlib里面的数据类型直接用,放到X里面,大多数CLR built类型都可以直接用
- 以前要引用一个String,要先定义个Namespace指向Mscorlib,然后<ms:String>HelloWorld</ms:String>
- 现在直接写<X:String>HelloWorld</X:String>,变为语法的一部分
- 支持在Xaml中定义Generics
- 比如 <resources><observableCollection x:Class=”ObservableCollection” X:TypeArguments=”Person”>
<Person><Name>Mont</Name>… - 以前只能用C#去定义,或这Subcalss一个新类
- 支持Dictionary任意类型的Key,以前只能是string,由于支持Generics,所以传入一个TypeArguments就可以定义Key类型了
- 支持定义事件,比如某对象返回一个Delegate
- 增加新属性更容易,比如定义个Person,给他加上两个属性。WF 4的variable就是用这个语法. X:SchemaMembers,然后定义Member的属性,类型
- 支持对象的非默认构造函数,比如我定义个一个Person,需要传入ID作为构造函数。新的语法支持x:Arguments
- <Person x:Class=”…”>
- <x:Arguments>EMP1234</x:Arguments>,这样的话,ObjectDataProvider就很少用了估计
- 支持静态工厂方法
- 比如构造一个Guid,可以不用默认构造函数,改为<Gruid x:ObjectFactory=”Guid.NewGuid” />
然后演示了一下新的Content Model,有XAML到模型,然后到不同的Graph,比如对象Graph,或者DOM Graph,他们戏称为DOM Box,^_^
新的XAMLPad 支持这些特性,而且很容易让你去扩展。
以前的XamlReader,只能是读一个xaml文件,解析到xaml 节点,然后生成一个对象图。不允许你做任何的扩展。
这也造成如果你在xaml中定义个了事件,导致xamlpad根本就不Render这个对象
新的xamlreader,会有一个Read方法,类似xmlreader一样,每次你读一个对象,可能是个StartMember,可能是StartObject也可能是个Event
对于这个对象你可以访问其类型,和Meta Data ,比如 node.Event.IsUnknown?
这些新的xamlReader、Writer, 以及ObjectReader、Writer可以在System.Xaml.dll 中访问到。11月份会出一个CTP版本
有了这个扩展,可以让我们更容易去做一些Parser,和 不同文件的转换
我们知道WPF中xaml最后会编译成二进制的BAML,新的类库中也多了BAMLReader/Writer
最后举了一个超酷的例子。写了一个WPF程序,调用一个WCF的服务,大概就是输入一个股票代码,返回用户该买还是不该买
cool在哪里呢?
1. WPF 程序完全用xaml写,没有C#代码,这就用到新的特性。 Call WCF的过程,是调用了WF,wf 4.0可以直接调用,不需要显示的定义runtime,host。
2. 调用WCF的WF代码也是完全xaml写, WF 4 中新的Activity ,比如ClientOperation,让你调用WCF配置一下就可以了。定义调用的contract,endpoint等
3. WCF 的服务完全是用xaml写的。这个主要的思路就是新的xaml wcf runtime支持wcf常用的对象模型
<Service>
<Contract>
<Endpoints>
<service.Implementation>
<Loginc using WF>
所以WF、WPF、WCF 完全可以用xaml搞定。鼓掌。。。
有些人问,为什么一定搞得这么复杂,写代码很容易啊? 这个也就是最近很热的 “OSLO”的一个初衷
我们有不同的模型或者应用场景,现在我们的做法是选择了一个通用的语言,然后用一个Runtime的API来实现特定的功能。
能否用特定的语言来实现特定的功能呢?
这就是我们定义个一个自己的模型,目前可以用M语言去定义,然后定义自己的语法,MGrama,接下来有特定的Runtime负责把模型或者数据转成特定的对象图
而对于Runtime这一部分,如何统一呢,那就是用xaml,来定义你的对象图
所以对象 到 xaml,Runtime加载xaml。 对象的表达可以用M语言。
比如定义个一个service就可以这么写
service HelloSvc
{
Opeartion SayHello;
Endpoint={“http://localhost/hellosvc”},
Binding=”httpBasicBinding”;
Implementation=
{
// you impl
}
}