public override object ProvideValue(IServiceProvider serviceProvider) { IProvideValueTarget Target = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget)); if (Target.TargetObject is DependencyObject) { DependencyObject TargetObject = (DependencyObject)Target.TargetObject; ITagValueSettingStore PropertyStore = PersistentPropertyExtension.TryGetPropertyStoreFromResources(TargetObject); PropertyStoreAdapter StoreAdapter = PropertyStoreAdapter.GetInstanceFor(PropertyStore); SettingValue Value = new SettingValue(StoreAdapter, this.Name, this.DefaultValue, TargetObject); Binding SettingBinding = new Binding("Value"); SettingBinding.Mode = BindingMode.TwoWay; SettingBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; SettingBinding.Source = Value; return(SettingBinding.ProvideValue(serviceProvider)); } else { return(this); } }
private static ITagValueSettingStore TryGetPropertyStoreFromResources(DependencyObject targetObject) { ITagValueSettingStore PropertyStore = null; if (targetObject is FrameworkElement) { PropertyStore = ((FrameworkElement)targetObject).TryFindResource("PersistentProperties") as ITagValueSettingStore; } else if (targetObject is FrameworkContentElement) { PropertyStore = ((FrameworkContentElement)targetObject).TryFindResource("PersistentProperties") as ITagValueSettingStore; } return(PropertyStore); }
public static PropertyStoreAdapter GetInstanceFor(ITagValueSettingStore tagValueSettingStore) { return(PropertyStoreAdapter.instances.GetObject(tagValueSettingStore ?? PropertyStoreAdapter.defaultStore)); }
private PropertyStoreAdapter(ITagValueSettingStore storage) { this.storage = storage; this.properties = new ObjectCache <string, object, PropertyAdapter>((name, defaultValue) => new PropertyAdapter(name, this.storage, defaultValue)); }
public PropertyAdapter(string key, ITagValueSettingStore propertyStore, object defaultValue) { this.key = key; this.propertyStore = propertyStore; this.value = this.propertyStore.ContainsKey(key) ? this.propertyStore[key] : defaultValue; }