public void DataContainerBase_SetBinding_MustBindOneWay() { const string PROP_NAME = "IntProperty"; const int VALUE = 42; const int NEW_VALUE = 14; IPropertyContainer pc = PropertyContainerBuilder.Create() .Property(PROP_NAME, VALUE) .Build(); var bindingTarget = new BindingTestObject(); Assert.NotEqual(VALUE, bindingTarget.IntProperty); pc.SetBinding(PROP_NAME, () => bindingTarget.IntProperty, BindingMode.OneWay); Assert.Equal(VALUE, bindingTarget.IntProperty); pc.SetValue(PROP_NAME, NEW_VALUE); Assert.Equal(NEW_VALUE, bindingTarget.IntProperty); bindingTarget.IntProperty = 32; int propertyValue = 0; pc.GetValue(PROP_NAME, ref propertyValue); pc.RemoveBinding(PROP_NAME, () => bindingTarget.IntProperty); Assert.NotEqual(32, propertyValue); Assert.Equal(NEW_VALUE, propertyValue); }
/// <summary> /// Gets list items for property that implemented as <see cref="IPropertyContainer"/> list. /// Example: /// <code> /// - Source: IPropertyContainer /// - ListProperty: IPropertyContainer /// - ListItem: IPropertyContainer /// - ListItem: IPropertyContainer /// </code> /// </summary> /// <param name="propertyContainer">Source property container.</param> /// <param name="listProperty">List property.</param> /// <returns>ListItem enumeration.</returns> public static IEnumerable <IPropertyContainer> GetListItems( this IPropertyContainer propertyContainer, IProperty <IPropertyContainer> listProperty) { IPropertyContainer list = propertyContainer.GetValue(listProperty) ?? PropertyContainer.Empty; return(list .Select(pv => pv.ValueUntyped as IPropertyContainer) .Where(container => container != null) !); }
/// <summary> /// Merges composite properties to one container. /// </summary> /// <param name="propertyContainer">Source property container.</param> /// <param name="mergeMode">Merge mode. Default: <see cref="PropertyAddMode.Set"/>.</param> /// <param name="properties">Properties to merge.</param> /// <returns>New <see cref="IPropertyContainer"/> instance.</returns> public static IPropertyContainer MergeProperties( this IPropertyContainer propertyContainer, PropertyAddMode mergeMode = PropertyAddMode.Set, params IProperty <IPropertyContainer>[]?properties) { propertyContainer.AssertArgumentNotNull(nameof(propertyContainer)); return(properties .NotNull() .Select(property => propertyContainer.GetValue(property)) .Merge(mergeMode)); }
/// <inheritdoc /> public Entity ToModel(IPropertyContainer container) { return(new Entity( createdAt: container.GetValue(CreatedAt), name: container.GetValue(Name))); }
/// <inheritdoc /> public T GetValue <T>(IProperty <T> property, bool searchInParent = true) => _propertyContainer.GetValue(property, searchInParent);