public static StringProxy GetStringValue(this IValueProvider valueProvider, IResourceContext context, bool setKey) { var proxy = new StringProxy(); var value = valueProvider.ProvideValue(context); if (value is BindingBase binding) { BindingOperations.SetBinding(proxy, StringProxy.ValueProperty, binding); if (setKey) { BindingOperations.SetBinding(proxy, StringProxy.KeyProperty, binding); } } else { proxy.Value = value?.ToString(); if (setKey) { proxy.Key = value; } } return(proxy); }
public void XamlLoadSharedTest() { string text = @" <ResourceDictionary xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' xmlns:test='clr-namespace:Granular.Presentation.Tests.Markup;assembly=Granular.Presentation.Tests'> <test:LoaderTestElement x:Shared='false' x:Key='item1' Value1='1' Value2='2'/> <test:LoaderTestElement x:Shared='true' x:Key='item2' Value1='3' Value2='4'/> </ResourceDictionary>"; XamlElement rootElement = XamlParser.Parse(text); ResourceDictionary dictionary = XamlLoader.Load(rootElement) as ResourceDictionary; Assert.IsNotNull(dictionary); Assert.IsTrue(dictionary.Contains("item1")); Assert.IsTrue(dictionary.Contains("item2")); IValueProvider valueProvider = dictionary.GetValue("item1") as IValueProvider; Assert.IsNotNull(valueProvider); LoaderTestElement item1a = valueProvider.ProvideValue() as LoaderTestElement; Assert.IsNotNull(item1a); Assert.AreEqual(1, ((LoaderTestElement)item1a).Value1); Assert.AreEqual(2, ((LoaderTestElement)item1a).Value2); LoaderTestElement item1b = valueProvider.ProvideValue() as LoaderTestElement; Assert.IsNotNull(item1b); Assert.AreNotEqual(item1a, item1b); Assert.AreEqual(1, ((LoaderTestElement)item1b).Value1); Assert.AreEqual(2, ((LoaderTestElement)item1b).Value2); LoaderTestElement item2 = dictionary.GetValue("item2") as LoaderTestElement; Assert.IsNotNull(item2); Assert.AreEqual(3, ((LoaderTestElement)item2).Value1); Assert.AreEqual(4, ((LoaderTestElement)item2).Value2); }
public static BoolProxy GetBoolValue(this IValueProvider valueProvider, IResourceContext context) { var proxy = new BoolProxy(); var value = valueProvider.ProvideValue(context); if (value is BindingBase binding) { BindingOperations.SetBinding(proxy, BoolProxy.ValueProperty, binding); } else { proxy.Value = value is bool b && b; } return(proxy); }
public object ProvideValue(IResourceContext context) { var value = innerProvider.ProvideValue(context); if (value is BindingBase binding) { binding.FallbackValue = defaultValue; return(binding); } if (value is T) { return(value); } return(defaultValue); }
public object ProvideValue(IResourceContext context) { var value = innerProvider.ProvideValue(context); if (value is Binding binding) { binding.Converter = binding.Converter == null ? valueConverter : new ConverterWrapper(valueConverter, binding.Converter); return(binding); } if (value is BindingBase) { return(value); } return(valueConverter.Convert(value, typeof(object), null, CultureInfo.CurrentCulture)); }
private object GetResourceValue() { object value; if (!resourceContainer.TryGetResource(resourceKey, out value)) { return ObservableValue.UnsetValue; } if (!(value is IValueProvider)) { return value; } if (currentValueProvider != value) { currentValueProvider = (IValueProvider)value; currentValue = currentValueProvider.ProvideValue(); } return currentValue; }
private object GetResourceValue() { object value; if (!resourceContainer.TryGetResource(resourceKey, out value)) { return(ObservableValue.UnsetValue); } if (!(value is IValueProvider)) { return(value); } if (currentValueProvider != value) { currentValueProvider = (IValueProvider)value; currentValue = currentValueProvider.ProvideValue(); } return(currentValue); }