如何使用IValueConverter将字符串值转换为整数并返回?
这是我下面的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();
}
答案 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;
}
}