public void WhenValueProviderTypeIdChanged_ThenBindingRaisesChanged() { var raised = false; var provider = new ValueProviderBindingSettings(); var binding = new BindingSettings { Properties = { new PropertyBindingSettings { ValueProvider = provider, } } }; binding.PropertyChanged += (sender, args) => raised = true; provider.TypeId = "foo"; Assert.True(raised); }
private static void AddPropertySettings(XElement cmdPropsElement, IList<IPropertyBindingSettings> bindings, XElement propSettingElement, IList<XElement> processedPropertySettings) { // Create a PropertyBindingSettings from the <PropertySettings> element. if (propSettingElement.Attributes().Any(a => a.Name == PropertySettingsNameName)) { var binding = new PropertyBindingSettings { Name = TrimName(propSettingElement.Attribute(PropertySettingsNameName).Value), Value = propSettingElement.Attributes().Any(a => a.Name == PropertySettingsValueName) ? DecodeValue(propSettingElement.Attribute(PropertySettingsValueName).Value) : null, }; // Determine if has a ValueProvider var valueProviderElement = propSettingElement.Descendants(ValueProviderElementName) .FirstOrDefault(); if (valueProviderElement != null) { var valueProviderSettingsElement = valueProviderElement.Descendants(ValueProviderSettingElementName) .FirstOrDefault(); if (valueProviderSettingsElement != null) { if (valueProviderSettingsElement.Attributes().Any(a => a.Name == ValueProviderSettingsIdName)) { var vpBinding = new ValueProviderBindingSettings { TypeId = valueProviderSettingsElement.Attribute(ValueProviderSettingsTypeIdName).Value, }; // Determine if the ValueProvider has nested <propertySettings> elements var propSettingsMonikers = valueProviderSettingsElement.Descendants(PropertySettingMonikerElementName); if (propSettingsMonikers.Any()) { // Match each nested <propertySettings> element, which should be linked to <commandSettings><properties> propSettingsMonikers.ForEach(psm => { var psmId = psm.Attribute(PropertySettingsMonikerIdName).Value; var vpPropSettings = cmdPropsElement.Descendants(PropertySettingsElementName) .FirstOrDefault(pse => pse.Attribute(PropertySettingsIdName).Value == psmId); if (vpPropSettings != null) { // Cache <propertySetting> element processedPropertySettings.Add(vpPropSettings); // Create Bindings AddPropertySettings(cmdPropsElement, vpBinding.Properties, vpPropSettings, processedPropertySettings); } }); } binding.ValueProvider = vpBinding; } } } bindings.Add(binding); } }
public void WhenValueProviderAndNoDefaultValue_ThenValidateValueProviderOrDefaultValueSucceeds() { PropertyBindingSettings defaultValueBindings = new PropertyBindingSettings(); defaultValueBindings.Value = ""; defaultValueBindings.ValueProvider = new ValueProviderBindingSettings { TypeId = "" }; ValueProviderBindingSettings valueProviderBindings = new ValueProviderBindingSettings { TypeId = "Foo" }; this.store.TransactionManager.DoWithinTransaction(() => { this.property.DefaultValue = defaultValueBindings; this.property.ValueProvider = valueProviderBindings; }); this.property.ValidateValueProviderOrDefaultValue(validationContext); Assert.True(validationContext.CurrentViolations.Count == 0); Assert.True(validationContext.ValidationSubjects.IndexOf(this.property) == 0); }