csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.1 KiB
69 lines
2.1 KiB
using Avalonia.Data;
|
|
using System;
|
|
|
|
namespace Avalonia.Markup.Xaml.MarkupExtensions
|
|
{
|
|
using Avalonia.Controls;
|
|
using Avalonia.Data.Converters;
|
|
using Avalonia.Markup.Data;
|
|
using Avalonia.Styling;
|
|
using System.ComponentModel;
|
|
|
|
public class ReflectionBindingExtension
|
|
{
|
|
public ReflectionBindingExtension()
|
|
{
|
|
}
|
|
|
|
public ReflectionBindingExtension(string path)
|
|
{
|
|
Path = path;
|
|
}
|
|
|
|
public Binding ProvideValue(IServiceProvider serviceProvider)
|
|
{
|
|
var descriptorContext = (ITypeDescriptorContext)serviceProvider;
|
|
|
|
return new Binding
|
|
{
|
|
TypeResolver = descriptorContext.ResolveType,
|
|
Converter = Converter,
|
|
ConverterParameter = ConverterParameter,
|
|
ElementName = ElementName,
|
|
FallbackValue = FallbackValue,
|
|
Mode = Mode,
|
|
Path = Path,
|
|
Priority = Priority,
|
|
Source = Source,
|
|
StringFormat = StringFormat,
|
|
RelativeSource = RelativeSource,
|
|
DefaultAnchor = new WeakReference(descriptorContext.GetDefaultAnchor()),
|
|
TargetNullValue = TargetNullValue,
|
|
NameScope = new WeakReference<INameScope>(serviceProvider.GetService<INameScope>())
|
|
};
|
|
}
|
|
|
|
public IValueConverter Converter { get; set; }
|
|
|
|
public object ConverterParameter { get; set; }
|
|
|
|
public string ElementName { get; set; }
|
|
|
|
public object FallbackValue { get; set; } = AvaloniaProperty.UnsetValue;
|
|
|
|
public BindingMode Mode { get; set; }
|
|
|
|
[ConstructorArgument("path")]
|
|
public string Path { get; set; }
|
|
|
|
public BindingPriority Priority { get; set; } = BindingPriority.LocalValue;
|
|
|
|
public object Source { get; set; }
|
|
|
|
public string StringFormat { get; set; }
|
|
|
|
public RelativeSource RelativeSource { get; set; }
|
|
|
|
public object TargetNullValue { get; set; } = AvaloniaProperty.UnsetValue;
|
|
}
|
|
}
|
|
|