Как найти конкретную привязку в ControlBindingCollection? - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь добавить метод AlreadyBound в свой код, чтобы избежать ошибки

HResult=0x80070057 This causes two bindings in the collection to bind to the same property.

вызывается

System.Windows.Forms.ControlBindingsCollection.CheckDuplicates(Binding binding)

Мой код

        public static void BindText(TextBox box, object dataSource, string dataMember)
    {

        if (AlreadyBound(box,"Text")) return;

        box.DataBindings.Add("Text", dataSource, dataMember, true, DataSourceUpdateMode.OnPropertyChanged);
        if (!(box is SnapTextBox snapbox)) return;
        switch (snapbox.SnapType)
        {
            case SnapBoxType.Money:
                snapbox.DataBindings[0].FormatString = "N2";
                break;
            case SnapBoxType.Real:
                snapbox.DataBindings[0].FormatString = $"N{snapbox.SnapRealDecimals}";
                break;
            case SnapBoxType.Text:
                break;
            case SnapBoxType.Integer:
                break;
            default:
                throw new ArgumentOutOfRangeException();
        }
    }

    private static bool AlreadyBound(TextBox box, string propertyName)
    {
        foreach (var binding in box.DataBindings)
        {
            // what do I put here?  something like
            //if (binding.ToString() == propertyName) return true; 
        }

        return false;
    }

Где SnapTextBox - пользовательский элемент управления.

Как мне заставить AlreadyBound работать?

1 Ответ

0 голосов
/ 23 июня 2019

У меня были проблемы с выяснением, какая привязка типа должна быть объявлена ​​как. Наконец, я попытался посмотреть на тип для box.DataBindings [0]

    private static bool AlreadyBound(TextBox box, string propertyName)
    {
        foreach (Binding binding in box.DataBindings)
        {
            if (binding.PropertyName == propertyName) return true; 
        }
        return false;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...