DataBindings. Добавить с помощью IFormatProvider - PullRequest
3 голосов
/ 24 апреля 2009

Я пытаюсь использовать 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 голосов
/ 25 апреля 2009

Что именно вы пытаетесь сделать?

Если предположить, что свойство Text является строкой, то, насколько мне известно, не может использовать форматтер, поскольку string не реализует IFormattable.

Класс Binding (который лежит в основе DataBindings.Add) имеет событие Format и событие Parse, которое можно использовать для управления форматированием. Вы также можете использовать TypeConverter на целевом привязанном свойстве, которое мне нравится, потому что оно удаляет эту логику из пользовательского интерфейса.

Итак: у вас есть пример того, что вы хотите сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...