Просмотр исходного кода

use compiled bidning for localizations (#5684)

Emmanuel Hansen 2 лет назад
Родитель
Сommit
d6bc0de785
1 измененных файлов с 16 добавлено и 6 удалено
  1. 16 6
      src/Ryujinx.Ava/Common/Locale/LocaleExtension.cs

+ 16 - 6
src/Ryujinx.Ava/Common/Locale/LocaleExtension.cs

@@ -1,6 +1,7 @@
-using Avalonia.Data;
+using Avalonia.Data.Core;
 using Avalonia.Markup.Xaml;
 using Avalonia.Markup.Xaml.MarkupExtensions;
+using Avalonia.Markup.Xaml.MarkupExtensions.CompiledBindings;
 using System;
 
 namespace Ryujinx.Ava.Common.Locale
@@ -18,11 +19,20 @@ namespace Ryujinx.Ava.Common.Locale
         {
             LocaleKeys keyToUse = Key;
 
-            ReflectionBindingExtension binding = new($"[{keyToUse}]")
-            {
-                Mode = BindingMode.OneWay,
-                Source = LocaleManager.Instance,
-            };
+            var builder = new CompiledBindingPathBuilder();
+
+            builder.SetRawSource(LocaleManager.Instance)
+                .Property(new ClrPropertyInfo("Item",
+                obj => (LocaleManager.Instance[keyToUse]),
+                null,
+                typeof(string)), (weakRef, iPropInfo) =>
+                {
+                    return PropertyInfoAccessorFactory.CreateInpcPropertyAccessor(weakRef, iPropInfo);
+                });
+
+            var path = builder.Build();
+
+            var binding = new CompiledBindingExtension(path);
 
             return binding.ProvideValue(serviceProvider);
         }