C# Silverlight xaml绑定到扩展方法
因此,我正在使用bing maps silverlight sdk进行一个小项目。我从服务器上获取了一堆对象(通过wcf服务),这些设备中的每一个都有一个lat/long属性。要在bing地图上映射某些内容,您需要为其提供位置类型(基本上只是lat/long的包装器) 我使用的类型存储在服务器上,并且只有lat long。我编写了一个名为Location的扩展方法,将它们包装到一个Location中并返回它们C# Silverlight xaml绑定到扩展方法,c#,silverlight,bing-maps,C#,Silverlight,Bing Maps,因此,我正在使用bing maps silverlight sdk进行一个小项目。我从服务器上获取了一堆对象(通过wcf服务),这些设备中的每一个都有一个lat/long属性。要在bing地图上映射某些内容,您需要为其提供位置类型(基本上只是lat/long的包装器) 我使用的类型存储在服务器上,并且只有lat long。我编写了一个名为Location的扩展方法,将它们包装到一个Location中并返回它们 <DataTemplate x:Key="MapVisualDat
<DataTemplate x:Key="MapVisualDataTemplate">
<m:Pushpin m:MapLayer.Position="{Binding Location}" />
</DataTemplate>
即使扩展方法在C#中是可见和可用的,xaml也没有正确地使用它。如果我将属性直接添加到服务器上的类型中,它就可以正常工作。只有将其定义为扩展方法,它才不起作用。我更希望它是一种扩展方法,因为它最终将用于各种类型
当Location是当前绑定到的任何类型的扩展方法时,是否可以使用上述语法进行绑定?我认为原因是在xaml中必须绑定到属性或依赖属性。扩展方法就是一种方法。即使该方法模仿一个属性,它仍然不是完全相同的东西。我相信原因是在xaml中,您必须绑定到属性或依赖属性。扩展方法就是一种方法。即使方法模仿属性,它也不是完全相同的东西。扩展方法的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();
}
}
扩展方法的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();
}
}
我认为这是可能的。如果我有时间,我会尝试创建MarkupExtension,这将有助于做到这一点 现在,我的想法是创建带有源和方法属性的MarkupExtension类。在XAML中,我们将如下所示使用它:
<TextBlock Text="{BindExt Source={Binding DataContext}, Method=MyExtMethod}" />
也许在不久的将来,我会在我的波兰博客上发布一些关于它的信息。我认为这是可能的。如果我有时间,我会尝试创建MarkupExtension,这将有助于做到这一点 现在,我的想法是创建带有源和方法属性的MarkupExtension类。在XAML中,我们将如下所示使用它:
<TextBlock Text="{BindExt Source={Binding DataContext}, Method=MyExtMethod}" />
也许在不久的将来,我会在我的波兰博客上发布一些关于它的信息