Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Silverlight xaml绑定到扩展方法_C#_Silverlight_Bing Maps - Fatal编程技术网

C# Silverlight xaml绑定到扩展方法

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

因此,我正在使用bing maps silverlight sdk进行一个小项目。我从服务器上获取了一堆对象(通过wcf服务),这些设备中的每一个都有一个lat/long属性。要在bing地图上映射某些内容,您需要为其提供位置类型(基本上只是lat/long的包装器)

我使用的类型存储在服务器上,并且只有lat long。我编写了一个名为Location的扩展方法,将它们包装到一个Location中并返回它们

       <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}" />
也许在不久的将来,我会在我的波兰博客上发布一些关于它的信息