2010-09-12 84 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