montaque

小碗喝酒,小口吃肉

博客园 首页 新随笔 联系 订阅 管理

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

}

}

posted on 2008-10-31 11:38  montaque  阅读(2063)  评论(7编辑  收藏  举报