【问题标题】:Need help developing and Binding a Double <--> Converter需要帮助开发和绑定双 <--> 转换器
【发布时间】:2013-12-15 19:32:44
【问题描述】:

我开发工程应用程序,因此经常处理double 号码。作为一个新手,由于 ComboBoxes 和其他控件更喜欢字符串,我的模型是基于字符串的:

Diameter = "0.523";

我已经在 Google 上进行了搜索,并获得了一些关于 Converters 的初步(令人困惑、矛盾的)信息:可以使用统一的解释。

IValueConverter 接口建立了一个Convert() 和一个ConvertBack() 对,但它们各自的方向是什么?转换器是 XAML 绑定到,比如说,TextBox,我的模型处理doubleConvert() 的一半行动是退出 TextBox 还是进入它?

我的目标是在输入非法数字时形成的红色矩形附近添加警告:“您输入的浮点数格式不正确”。

我写了 2 个转换器类:DoubleToStringStringToDouble。不确定哪个是正确的(另外,两者都崩溃了)。

【问题讨论】:

    标签: c# wpf textbox wpf-controls


    【解决方案1】:

    大多数时候人们只在工作中使用 Convert 方法。 ConvertBack 用于双方都需要转换时。 XAML 到模型,反之亦然

    这是双倍的示例。您可以根据需要进一步格式化该值。

    [ValueConversion(typeof(double) ,typeof(string))]
    public class DoubleConverter : IValueConverter
    {
        public object Convert(object value ,Type targetType ,object parameter ,CultureInfo culture)
        {
            double doubleType = (double)value;
            return doubleType.ToString();
        }
    
        public object ConvertBack(object value ,Type targetType ,object parameter ,CultureInfo culture)
        {
            string strValue = value as string;
            double resultDouble;
            if ( double.TryParse(strValue ,out resultDouble) )
            {
                return resultDouble;
            }
            return DependencyProperty.UnsetValue;
        }
    }
    

    【讨论】:

    • 是的,您肯定缺少一些东西:耐心,以及人和机器不一样的事实。
    【解决方案2】:

    Convert 用于将模型的值转换为文本框。 ConvertBack 将文本框的值转换回您的模型。

    您说您在模型中保留了字符串。这意味着您根本不需要转换器。但是,您最好在模型中放入双精度并正确转换它们。

    另外,如果您只需要一种方式转换(从模型到控件),则根本不需要转换器。例如,请参阅here

    【讨论】:

    • “例如,请参见此处。” “这里”不见了。 :-) 应该有链接吗?
    • 糟糕,抱歉。现已修复。
    猜你喜欢
    • 2016-03-04
    • 2016-01-13
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多