Pull to refresh

Comments 11

А что сложного в INPC и contorl.DataBinding.Add()?
Ну, кроме того, что в WinForms нужно в Add передавать строкой названия свойств.
накидал на коленке пример.
https://github.com/Zagrebelin/WinformsDatabinding
Да наверно ничего сложного нет. Вопрос только в том, что обычно биндинги обеспечивают от контрола к источнику связь. Я знаю, что есть двухсторонний режим, но мне реально быстрее было один раз написать свое, чем лезть на msdn.com и вычитывать там как настроить двухстороннюю связь при многопоточности. У них серьезные проблемы с документацией по этому вопросу.
А у вас Binding_SetValueToControl нормально работает в многопоточной среде? TargetControl....SetValue() не падает, если свойство модели было установлено не в UI потоке?
падает конечно. я специально опустил этот момент, чтобы не грузить новичков нипанятным. а вообще, там стандартная схема if(...InvokeRequired). ну и через делегат, который вызывает тот же самый метод. все летает прекрасно. вообще голова теперь не болит за обновление контролов.
UFO just landed and posted this here
1) if (this.PropertyIsChanged != null) { this.PropertyIsChanged.Invoke(); — это кусок кода обязательно необходим, поскольку в противном случае, можно нарваться на nullReference-исключение.

И в этом случае тоже может быть null ref, потому что после проверки последний подписчик может отписаться от события.

Поэтому правильней делать так:
    EventHandler handler = this.PropertyIsChanged;
    if (handler != null)
    {
        handler(this, EventArgs.Empty);
    }

Это как? Если задействован set-аксессор поля Property, то пока не выработается его логика, никто ни от чего отписаться не может. Не уверен насчет кросс-поточности, но в любом случае этот код падает при попытке изменить контрол с НЕ-UI потока. Я уже писал выше.
при многопоточности этот код и так бабахнется.
падает конечно. я специально опустил этот момент, чтобы не грузить новичков нипанятным. а вообще, там стандартная схема if(...InvokeRequired). ну и через делегат, который вызывает тот же самый метод. все летает прекрасно. вообще голова теперь не болит за обновление контролов
кстати, обычные биндинги из winforms работают с разными потоками. Я там выше давал ссылку на репозитарий — есть чекбокс про потоки.
Sign up to leave a comment.

Articles