21 std::unique_ptr<Binding> _innerBinding;
30 : _targetElement(targetElement), _innerBinding(binding)
32 UpdateDataContextBinding();
33 RegisterNotifications();
42 UnregisterNotifications();
51 return _innerBinding->UpdateTarget();
60 return _innerBinding->UpdateSource();
68 return _innerBinding->GetTargetPropertyId();
76 return _innerBinding->GetSourcePropertyId();
85 return _targetElement;
94 if (_targetElement != element) {
95 UnregisterNotifications();
96 _targetElement = element;
97 UpdateDataContextBinding();
98 RegisterNotifications();
106 void RegisterNotifications()
108 if (_targetElement !=
nullptr) {
119 void UnregisterNotifications()
121 if (_targetElement !=
nullptr) {
123 ObjectDeadEventHandler(*
this, &DataBinding::OnTargetElementDead);
125 DataContextChangedEventHandler(*
this, &DataBinding::OnTargetElementDataContextChanged);
132 void UpdateDataContextBinding()
134 if (_targetElement ==
nullptr) {
135 _innerBinding->SetBindingObjects(
nullptr,
nullptr);
144 void OnTargetElementDead(INotifyObjectDead &sender)
152 void OnTargetElementDataContextChanged(UIElement &sender, DynamicObject *oldval)
154 UpdateDataContextBinding();
167 assert(binding !=
nullptr);
181 typename TTargetObject,
182 typename TTargetProperty,
183 typename TSourceObject,
184 typename TSourceProperty>
185 static auto Create(TTargetProperty TTargetObject::*targetProperty,
186 TSourceProperty TSourceObject::*sourceProperty,
188 IValueConverter<typename TSourceProperty::TValue, typename TTargetProperty::TValue> *converter = nullptr)
189 -> typename std::enable_if<
194 std::is_same<typename TTargetProperty::TValue, typename TSourceProperty::TValue>::value,
210 typename TTargetObject,
211 typename TTargetProperty,
212 typename TSourceObject,
213 typename TSourceProperty>
214 static auto Create(TTargetProperty TTargetObject::*targetProperty,
215 TSourceProperty TSourceObject::*sourceProperty,
217 IValueConverter<typename TSourceProperty::TValue, typename TTargetProperty::TValue> *converter)
218 -> typename std::enable_if<
223 !std::is_same<typename TTargetProperty::TValue, typename TSourceProperty::TValue>::value,
数据绑定基类
Definition Binding.h:38
数据绑定类
Definition Binding.h:73
static auto Create(DynamicObject *target, TTargetProperty TTargetObject::*targetProperty, DynamicObject *source, TSourceProperty TSourceObject::*sourceProperty, BindingMode mode, IValueConverter< typename TSourceProperty::TValue, typename TTargetProperty::TValue > *converter=nullptr) -> typename std::enable_if< _IsProperty< TTargetProperty >::value &&_IsProperty< TSourceProperty >::value &&std::is_base_of< DynamicObject, TTargetObject >::value &&std::is_base_of< DynamicObject, TSourceObject >::value &&std::is_same< typename TTargetProperty::TValue, typename TSourceProperty::TValue >::value, Binding * >::type
创建绑定对象
Definition Binding.h:408
数据绑定,用于UI元素与DataContext之间的属性绑定
Definition DataBinding.h:11
virtual FieldId GetTargetPropertyId() const override
获取目标属性ID
Definition DataBinding.h:66
virtual bool UpdateSource() override
更新源属性的值
Definition DataBinding.h:58
virtual ~DataBinding()
析构函数
Definition DataBinding.h:40
static DataBinding * Create(UIElement *targetElement, Binding *binding)
创建数据绑定对象
Definition DataBinding.h:165
UIElement * GetTargetElement() const
获取目标元素
Definition DataBinding.h:83
static auto Create(TTargetProperty TTargetObject::*targetProperty, TSourceProperty TSourceObject::*sourceProperty, BindingMode mode, IValueConverter< typename TSourceProperty::TValue, typename TTargetProperty::TValue > *converter=nullptr) -> typename std::enable_if< _IsProperty< TTargetProperty >::value &&_IsProperty< TSourceProperty >::value &&std::is_base_of< DynamicObject, TTargetObject >::value &&std::is_base_of< DynamicObject, TSourceObject >::value &&std::is_same< typename TTargetProperty::TValue, typename TSourceProperty::TValue >::value, DataBinding * >::type
创建数据绑定对象
Definition DataBinding.h:185
virtual FieldId GetSourcePropertyId() const override
获取源属性ID
Definition DataBinding.h:74
void SetTargetElement(UIElement *element)
设置目标元素
Definition DataBinding.h:92
static auto Create(TTargetProperty TTargetObject::*targetProperty, TSourceProperty TSourceObject::*sourceProperty, BindingMode mode, IValueConverter< typename TSourceProperty::TValue, typename TTargetProperty::TValue > *converter) -> typename std::enable_if< _IsProperty< TTargetProperty >::value &&_IsProperty< TSourceProperty >::value &&std::is_base_of< DynamicObject, TTargetObject >::value &&std::is_base_of< DynamicObject, TSourceObject >::value &&!std::is_same< typename TTargetProperty::TValue, typename TSourceProperty::TValue >::value, DataBinding * >::type
创建数据绑定对象
Definition DataBinding.h:214
virtual bool UpdateTarget() override
更新目标属性的值
Definition DataBinding.h:49
动态对象基类
Definition Reflection.h:26
ObjectDeadEventHandler ObjectDead
对象销毁时触发该事件
Definition INotifyObjectDead.h:23
值转换器接口
Definition IValueConverter.h:20
表示界面中的元素
Definition UIElement.h:90
const ReadOnlyProperty< DynamicObject * > CurrentDataContext
当前元素的有效数据上下文
Definition UIElement.h:418
DataContextChangedEventHandler DataContextChanged
数据上下问改变时触发该事件
Definition UIElement.h:284
表示字段的唯一标识符
Definition Reflection.h:177
判断类型是否为属性的辅助模板
Definition Property.h:94