尝试在convert方法中将文本框值转换为int

时间:2014-12-11 19:34:36

标签: wpf

我尝试将文本框值绑定到按钮IsEnable属性,但我得到一个例外。 这是我的转换类:

    public class BooleanToVisibilityConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string num = value as string;
        int n = int.Parse(num);
        if (n > 10) return true;  
        return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
} 

这是我的xaml代码:

        <Button Content="Button" Grid.Column="1" IsEnabled="{Binding ElementName=mytext,Path=Text,Converter={StaticResource convertIntToBool}}" HorizontalAlignment="Left" Margin="83,181,-156,-179" Grid.Row="1" VerticalAlignment="Top" Width="74"/>
    <TextBox Grid.Column="1" x:Name="mytext" HorizontalAlignment="Left" Height="23" Margin="263,163,-382,-163" Grid.Row="1" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>

我得到FormatException:输入字符串的格式不正确。

1 个答案:

答案 0 :(得分:0)

好的,所以你想在TextBox中处理用户输入,并根据此输入启用或禁用按钮。

首先,您正在使用int.Parse,这意味着您信任用户在TextBox中编写一个数字:不要相信用户输入。

你需要使用int.TryParse,这样如果输入不是数字,它就不会抛出异常。

其次,我不知道为什么你将TextBox的Text属性设置为&#34; TextBox&#34;,这就是抛出异常的原因。

您的转换器代码应如下所示:

public class BooleanToVisibilityConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string num = value as string;
        int n;
        if(int.TryParse(num, out n)) { //return true is the parse worked
            if(n > 10) return true;
        }
        return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}