使用IValueConverter将字符串转换为int

时间:2014-05-09 13:31:05

标签: c# wpf ivalueconverter

如何使用IValueConverter将字符串值转换为整数并返回?

  • 我有一个由两个表组成的数据库;表CompanyX和表DeptY。
  • 表CompanyX具有字段ID(int),firstName,lastName,电子邮件,电话。
  • 表DeptY具有字段pID(int),角色。
  • DeptY pID是CompanyX ID的外键。每当我在Combobox中选择某人时,我希望它在DataGrid中显示为他们的ID。

这是我下面的ItemTemplate:

<Application.Resources>
    <DataTemplate x:Key="myTemplate">
        <WrapPanel HorizontalAlignment="Stretch">
            <TextBlock Text="{Binding FirstName}"/>
            <Label />
            <TextBlock Text="{Binding LastName}"/>
        </WrapPanel>
    </DataTemplate>
</Application.Resources>

这是我的Combobox,它绑定到ItemTemplate:

<ComboBox Height="23" HorizontalAlignment="Right" Margin="0,90,267,0" 
          Name="comboID"    ItemsSource="{Binding}" VerticalAlignment="Top" 
          Width="208" ItemTemplate="{StaticResource myTemplate}" />

显示的DataGrid:

<DataGridTemplateColumn x:Name="pIDColumn" Header="Person ID" Width="auto">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=pID, Converter= {StaticResource myConverter}}"/>   
        <DataTemplate>
    </DataGridTemplateColumn.CellTemplate>                            
</DataGridTemplateColumn>
<DataGridTemplateColumn x:Name="rolesColumn" Header="Roles" Width="auto" >
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=Roles}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> 

没有转换的IValueConverter !!

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    string a = (string)value;
    int b;
    int.TryParse(a, out b);
    return b;
}
public object ConvertBack(object value, Type targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
    throw new NotImplementedException();
}

2 个答案:

答案 0 :(得分:2)

你正在改变错误的方式。 Convert()将绑定源作为输入(在您的情况下为int),并输出xaml期望的内容(string)。

但你甚至不需要转换器。您可以直接绑定到int,WPF会自动调用ToString()将其显示为文本。

答案 1 :(得分:0)

就像在另一个答案中所说的那样,您正在倒退。 IValueConverter的Convert端用于从source属性转换为绑定元素(在您的情况下为文本框)中的元素。您需要在ConvertBack端进行解析,因为这就是文本框中的内容(字符串)并将其转换回数字的原因。

public class IntToString : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value.ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        int ret = 0;
        return int.TryParse((string)value, out ret) ? ret : 0;
    }
}