2010-09-12 88 views
0

因此,我正在使用bing映射silverlight sdk的小项目。我从服务器上获取了一堆对象(通过wcf服务),并且每个设备都具有经纬度属性。要映射在Bing地图的东西,你有位置类型Silverlight xaml绑定到扩展方法

我与存储在服务器上的工作类型和只有Lat Long网(基本上只是对经/纬的包装)提供的。我写了一个称为Location的扩展方法,将它们包装到一个位置并返回它们。

 <DataTemplate x:Key="MapVisualDataTemplate"> 
     <m:Pushpin m:MapLayer.Position="{Binding Location}" /> 
    </DataTemplate> 

尽管扩展方法在C#中可见并且可用,但它并未被xaml正确使用。如果我直接将属性添加到服务器上的类型,它工作正常。只有将它定义为扩展方法,它才能工作。我宁愿它是一个扩展方法,因为它最终将用于各种类型。

是否有可能当使用地点为任何类型的目前被绑定到一个扩展方法上述语法结合?

回答

2

我相信原因是,在XAML必须绑定到任何一个属性或依赖属性。扩展方法就是这样一种方法。即使该方法模仿一个​​属性,它仍然不是一回事。

1

的XAML相当于扩展方法是价值转换。这里是一个例子:

public class Converter:IValueConverter 
{ 
    object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return "foo"; 
    } 

    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
0

我认为这是可能的。如果我有一段时间,我会尝试创建MarkupExtension,这将有助于做到这一点。

现在,我的想法是创建的MarkupExtension类来源和方法属性。在XAML,我们会使用它就像这里:

<TextBlock Text="{BindExt Source={Binding DataContext}, Method=MyExtMethod}" /> 

来源就是我们设置上,我们调用MyExtMethod(扩展方法)源对象的属性。由于找到这种方法的性能,我可能会添加另一个名为ExType的属性,其中将存储一个类型的静态类,其中声明了MyExtMethod。这可以帮助改善搜索扩展方法的性能,但XAML语法会更长:/

所以我们现在的一些原型表达:

<TextBlock Text="{BindExt Source={Binding DataContext}, Method=MyExtMethod, ExType=ex:ExtMethods}" /> 

,其中“前”字头可以如BrightShadow.Data.Extensions命名空间:

xmlns:ex="clr-namespace:BrightShadow.Data.Extensions;assembly=BrightShadowAssembly" 

也许在不久的将来做些什么,我将张贴在我的博客的波兰here