2012-01-11 68 views
0

我在代碼轉換器後面叫StringToIntConverter我嘗試使用它在XAML這樣的結合,其中s是該項目的命名空間:如何從XAML中的代碼訪問轉換器?

Converter={s:StringToIntConverter} 

但它說,它缺少的程序集引用。我究竟做錯了什麼?

我知道有一些方法可以將它作爲一個資源,然後引用資源,但我不知道如何去做。

回答

3
<Some.Resources> 
    <s:StringToIntConverter x:Key="StringToIntConverter"/> 
</Some.Resources> 
<!-- ... --> 
Converter={StaticResource StringToIntConverter} 

大括號表示markup extension,他們不能只是任意使用以實例化對象,但爲了方便,你可以的轉換器轉換成標記擴展。

喜歡的東西:

public class StringToIntConverter : MarkupExtension, IValueConverter 
{ 
    //... 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return this; 
    } 
} 

然後你使用的代碼會工作得很好!


另請注意,您也可以使用XML元素語法中的綁定來實例化轉換器,例如,

<TextBox> 
    <TextBox.Text> 
     <Binding Path="String"> 
      <Binding.Converter> 
       <s:StringToIntConverter /> 
      </Binding.Converter> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 
+0

謝謝你,第一個例子工作。 – mihajlv 2012-01-11 03:24:08

+0

@mihajlv:不客氣。 (爲什麼你接受一個你不明白的答案?) – 2012-01-11 03:55:29

+0

我的錯誤,我以爲我接受你的,現在是固定的。 – mihajlv 2012-01-11 06:07:13

3

呃 - 通常情況下,如果我瞭解您的問題就會出現這種情況。你創建了一個轉換器嗎?在你的XAML中,你需要像這樣添加一個對程序集的引用。

xmlns:converters="clr-namespace:Shared.Converters;assembly=Shared" 

即使是在同一個組件 - 類似...

xmlns:local="clr-namespace:ItemMaster" 

現在,您需要創建要使用任何轉換器中的靜態資源。

<converters:CostMethodToBooleanConverter x:Key="CostMethodToBooleanConverter"/> 

然後你就可以使用它。

IsEnabled="{Binding SelectedItem, Converter={StaticResource ReverseCostMethodToBooleanConverter}, ElementName=OemOriginalCostMethod}"/> 

這有幫助嗎?

+0

我不確定你在說什麼,通過聲明本地命名空間,你真的需要這兩個,共享屬性是什麼意思? – mihajlv 2012-01-11 03:26:15