我有Languages
枚举。我的Model.Translations
代表不同的语言翻译:
public ObservableCollection<LanguageValue> Translations { get; set; }
public class LanguageValue
{
public Language Key { get; set; }
public string Value { get; set; }
}
我希望我的视图在翻译中为每个项目都有标签 - 文本框列表。
但是在Label中我希望有类似"Caption ({0})"
的东西,其中参数是语言名称(枚举到字符串表示)。本文本身来自Resources。
类似的东西:
<ItemsControl ItemsSource="{Binding Path=Translations}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="5,2,5,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30*"/>
<ColumnDefinition Width="70*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" x:Name="ItemLabel" VerticalAlignment="Center"
Text="{Binding Path=Key, Converter=languageConverter, ConverterParameter={x:Static res:Resources.lblCaption}}" />
<TextBox Grid.Column="1" x:Name="ItemText" VerticalAlignment="Center"
Text="{Binding Path=Value, Mode=TwoWay}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我的语言转换器:
[ValueConversion(typeof(Language), typeof(string))]
public class LanguageToDisplayConverter : IValueConverter
{
public object Convert(object value, Type t, object parameter, CultureInfo culture)
{
return string.Format(parameter.ToString(), ((Language)value).ToString());
}
public object ConvertBack(object value, Type t, object parameter, CultureInfo culture)
{
//I guess I don't need this anyway?
return null;
}
}
但我有错误:
The TypeConverter for "IValueConverter" does not support converting from a string.
有什么问题?
答案 0 :(得分:1)
您应该将转换器声明为资源(在Window中,或App.xaml中的应用程序范围内):
<Window.Resources>
<views:LanguageToDisplayConverter x:Key="languageConverter"/>
</Window.Resources>
并相应地使用:
Text="{Binding Path=Key, Converter={StaticResource languageConverter}, ...
错误“Typealverter for”IValueConverter“不支持从字符串转换”表示wpf无法将字符串“languageConverter”识别为转换器
使用Binding的StringFormat属性也可以实现相同的效果,没有转换器:
Text="{Binding Path=Key, StringFormat={x:Static res:Resources.lblCaption}}"