2016-09-19 97 views
0

我有Languages枚举。而我Model.Translations代表着不同语言的翻译:枚举与转换器绑定

public ObservableCollection<LanguageValue> Translations { get; set; } 
public class LanguageValue 
    { 
     public Language Key { get; set; } 
     public string Value { get; set; } 
    } 

我想我的观点有标签 - 文本框列表中的每个翻译项目。 但在标签我想有类似"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> 

我LanguageConverter:

[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. 

有什么不对?

回答

1

应声明你的转换器作为一种资源(在一个窗口,或应用范围在App.xaml中):

<Window.Resources> 
    <views:LanguageToDisplayConverter x:Key="languageConverter"/> 
</Window.Resources> 

,并相应地使用:

Text="{Binding Path=Key, Converter={StaticResource languageConverter}, ... 

错误“的类型转换器对于“IValueConverter”不支持从字符串转换“表示wpf没有识别字符串”languageConverter“作为转换器

同样的效果也可以通过使用S TringFormat Binding属性,无转换器:

Text="{Binding Path=Key, StringFormat={x:Static res:Resources.lblCaption}}"