using Avalonia.Data; using Avalonia.Data.Converters; using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml.MarkupExtensions; using Cowain.Base.Helpers; using System.Reflection; namespace Cowain.Base.Extensions; public class GlobalDataExtensions : MarkupExtension { private string _key; private string? _path; public GlobalDataExtensions(string key) { _key = key; } public GlobalDataExtensions(string key, string path) : this(key) { _path = path; } public override object ProvideValue(IServiceProvider serviceProvider) { if (string.IsNullOrEmpty(_path)) { var binding = new ReflectionBindingExtension("[" + _key + "]") { Mode = BindingMode.OneWay, Source = GlobalData.Instance }; return binding.ProvideValue(serviceProvider); } else { //绑定复杂的对象表达式 var bindingPath = $"[{_key}].{_path}"; var binding = new ReflectionBindingExtension(bindingPath) { Mode = BindingMode.OneWay, Source = GlobalData.Instance }; return binding.ProvideValue(serviceProvider); } } }