【问题标题】:Convert string to int using IValueConverter使用 IValueConverter 将字符串转换为 int
【发布时间】:2014-06-27 06:30:30
【问题描述】:

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

  • 我有一个由两个表组成的数据库;表 CompanyX 和表 DeptY。
  • 表 CompanyX 具有字段 ID(int)、名字、姓氏、电子邮件、电话。
  • Table 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>

这是我绑定到 ItemTemplate 的 Combobox:

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

还有一个显示:

<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();
}

【问题讨论】:

  • 您的转换方法是否被调用(在其中设置断点)?

标签: c# wpf ivalueconverter


【解决方案1】:

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

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

【讨论】:

  • 你会怎么做??
  • 我不想将其显示为文本。我想在数据网格中显示我在组合框中选择的那个人的 ID,例如当我单击添加按钮时,它应该显示人员 ID。
  • @Andy 你想显示什么?唯一的其他选项是图片(绘图)或烟雾信号。
  • 现在,如果您想将其显示为 ID - 假设您的意思是屏幕上的 TextBlock 不可编辑的文本,然后摆脱转换器并仅绑定 OneWay.i.e。 {Binding Path=ID, Mode=OneWay}
  • 对不起 XAMIMAX,也许我应该重新解释一下这个问题
【解决方案2】:

就像在另一个答案中所说的那样,您正在倒退。 IValueConverter 的 Convert 端用于将源属性转换为绑定元素中的内容,在您的情况下为文本框。您需要在 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;
    }
}

【讨论】:

    猜你喜欢
    • 2012-12-24
    • 1970-01-01
    • 2013-09-26
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2011-03-06
    相关资源
    最近更新 更多