我在代碼轉換器後面叫StringToIntConverter
我嘗試使用它在XAML這樣的結合,其中s是該項目的命名空間:如何從XAML中的代碼訪問轉換器?
Converter={s:StringToIntConverter}
但它說,它缺少的程序集引用。我究竟做錯了什麼?
我知道有一些方法可以將它作爲一個資源,然後引用資源,但我不知道如何去做。
我在代碼轉換器後面叫StringToIntConverter
我嘗試使用它在XAML這樣的結合,其中s是該項目的命名空間:如何從XAML中的代碼訪問轉換器?
Converter={s:StringToIntConverter}
但它說,它缺少的程序集引用。我究竟做錯了什麼?
我知道有一些方法可以將它作爲一個資源,然後引用資源,但我不知道如何去做。
<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>
呃 - 通常情況下,如果我瞭解您的問題就會出現這種情況。你創建了一個轉換器嗎?在你的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}"/>
這有幫助嗎?
我不確定你在說什麼,通過聲明本地命名空間,你真的需要這兩個,共享屬性是什麼意思? – mihajlv 2012-01-11 03:26:15
謝謝你,第一個例子工作。 – mihajlv 2012-01-11 03:24:08
@mihajlv:不客氣。 (爲什麼你接受一個你不明白的答案?) – 2012-01-11 03:55:29
我的錯誤,我以爲我接受你的,現在是固定的。 – mihajlv 2012-01-11 06:07:13