DataBindings.Add使用IFormatProvider

时间:2009-04-24 17:46:11

标签: c# .net data-binding

我正在尝试使用IFormatProvider来自定义一些数据绑定;但永远不会调用IFormatProvider类。我在自定义格式化类中的两个函数的开头都放置了断点,并且都没有通过数据绑定来命中。当我使用String.Format的自定义格式化类时,它可以工作。

我正在使用.Net 2.0和winforms。

这就是我进行数据绑定的方式:

label1.DataBindings.Add("Text", textBox1, "Text", true, 
                            DataSourceUpdateMode.OnPropertyChanged, 
                "<NULL>","{0:H}",new MyFormat());

这就是我使用String.Format的方式:

string test =(string.Format(_superFormat, "{0}", "this is my arg"));

这是我自定义的格式化课程:

    class MyFormat : IFormatProvider, ICustomFormatter
    {
        string ICustomFormatter.Format(string format, object arg, IFormatProvider formatProvider)
        {
            string result = ((string)arg).ToUpper();
            return result ;
        }
        object IFormatProvider.GetFormat(Type formatType)
        {
            if (formatType == typeof(ICustomFormatter))
                return this;
            else
                return null;
        }
    }

1 个答案:

答案 0 :(得分:3)

你究竟想做什么?

假设Text属性是一个字符串,那么据我所知它不能使用格式化程序,因为string没有实现IFormattable }。

Binding类(支持DataBindings.Add)有一个Format事件和Parse事件,可用于控制格式。你也可以在目标绑定属性上使用TypeConverter,我喜欢它,因为它将这个逻辑移离UI。

所以:你有一个你想做的例子吗?