48 lines
1.2 KiB
C#
48 lines
1.2 KiB
C#
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);
|
|
|
|
}
|
|
|
|
}
|
|
}
|