2012年9月19日星期三

WinRT/Metro: 碉堡了!支持IDictionarystring, object的Binding!

WinRT/Metro: 碉堡了!支持IDictionarystring, object的Binding!

数据绑定:Binding,这个WPF在最初版本2006年就有的功能,应该算上WPF(或者说XAML)最吸引人的功能之一了,而WinRT中的绑定又增加了一个惊异的特性:直接绑定一个IDictionary<string, object>对象,第一个string代表绑定路径(所以其他类型不可以),第二个object就代表属性的值。我试了<string, string>, <object, object>都不可以,只有<string, object>才可以使绑定生效。这个是我在研究Visual Studio 2012工程模板中的LayoutAwarePage类型的DefaultViewModel中发现,DefaultViewModel用的是ObservableDictionary<string, object>类型,继承IObservableMap<string, object>接口,当然测试证明任何IDictionary<string, object>都是可以的。

 

代码就很简单了,XAML上随便设置一个绑定:

<Button Content="{Binding Path}"/>

 

背后把DataContext设置成一个IDictionary<string,object>:

var dic = new Dictionary<string, object>();

dic["Path"] = "Mgen";

this.DataContext = dic;

 

结果:

image


TAG: