示例#1
0
        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);
            }
        }
示例#2
0
        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));
 }
示例#5
0
 public PropertyAdapter(string key, ITagValueSettingStore propertyStore, object defaultValue)
 {
     this.key           = key;
     this.propertyStore = propertyStore;
     this.value         = this.propertyStore.ContainsKey(key) ? this.propertyStore[key] : defaultValue;
 }