DataBindings.Add使用IFormatProvider

3
我正在尝试使用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个回答

3

你到底想做什么?

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

Binding类(支持DataBindings.Add)具有Format事件和Parse事件,可用于控制格式。您还可以在目标绑定属性上使用TypeConverter,我喜欢这种方法,因为它将这个逻辑从UI中移开。

那么:你有要做的示例吗?


1
他的问题非常明显。他向DataBindings.Add提供了一个自定义格式化程序,但WinForms完全忽略它,从未调用GetFormat()或Format()。我也有同样的问题,想知道为什么可以指定格式化程序却实际上没有使用它。 - Tor Haugen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接