fix: Call Bindings.Update to initialize x:Bind bindings

This commit is contained in:
Nick Randolph 2023-05-23 00:06:12 +10:00
Родитель 9be16a0db1
Коммит d37521ad7a
28 изменённых файлов: 459 добавлений и 16 удалений

Просмотреть файл

@ -15,6 +15,7 @@
<ItemGroup>
<ProjectReference Include="$(MSBuildThisFileDirectory)\..\..\src\Uno.Extensions.Core.Generators\Uno.Extensions.Core.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="$(MSBuildThisFileDirectory)\..\..\src\Uno.Extensions.Navigation.Generators\Uno.Extensions.Navigation.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="$(MSBuildThisFileDirectory)\..\..\src\Uno.Extensions.Reactive.Generator\Uno.Extensions.Reactive.Generator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
</ItemGroup>

Просмотреть файл

@ -155,6 +155,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Uno.Extensions.Core.UI", ".
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Uno.Extensions.Core.WinUI", "..\..\src\Uno.Extensions.Core.UI\Uno.Extensions.Core.WinUI.csproj", "{0706A3E8-9DB3-4344-979B-376CD04D76B9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Uno.Extensions.Navigation.Generators", "..\..\src\Uno.Extensions.Navigation.Generators\Uno.Extensions.Navigation.Generators.csproj", "{B4F14C65-EC7C-4641-81A6-576BA122E8C2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
@ -3218,6 +3220,62 @@ Global
{0706A3E8-9DB3-4344-979B-376CD04D76B9}.Release|x64.Build.0 = Release|Any CPU
{0706A3E8-9DB3-4344-979B-376CD04D76B9}.Release|x86.ActiveCfg = Release|Any CPU
{0706A3E8-9DB3-4344-979B-376CD04D76B9}.Release|x86.Build.0 = Release|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.AppStore|Any CPU.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.AppStore|ARM.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.AppStore|ARM.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.AppStore|ARM64.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.AppStore|ARM64.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.AppStore|iPhone.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.AppStore|x64.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.AppStore|x64.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.AppStore|x86.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.AppStore|x86.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Debug|ARM.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Debug|ARM.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Debug|ARM64.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Debug|iPhone.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Debug|x64.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Debug|x64.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Debug|x86.ActiveCfg = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Debug|x86.Build.0 = Debug|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Release|Any CPU.Build.0 = Release|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Release|ARM.ActiveCfg = Release|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Release|ARM.Build.0 = Release|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Release|ARM64.ActiveCfg = Release|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Release|ARM64.Build.0 = Release|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Release|iPhone.ActiveCfg = Release|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Release|iPhone.Build.0 = Release|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Release|x64.ActiveCfg = Release|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Release|x64.Build.0 = Release|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Release|x86.ActiveCfg = Release|Any CPU
{B4F14C65-EC7C-4641-81A6-576BA122E8C2}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -3290,6 +3348,7 @@ Global
{349E684D-BC28-4D6E-8CA6-6646DE7FD478} = {235663AE-4E7D-4FA4-964E-012C2F143FE5}
{BDAB734F-2622-4591-B06B-87C6EC53B282} = {F9372730-80BC-47B6-9E23-B5F69E36768F}
{0706A3E8-9DB3-4344-979B-376CD04D76B9} = {F9372730-80BC-47B6-9E23-B5F69E36768F}
{B4F14C65-EC7C-4641-81A6-576BA122E8C2} = {A7450AE8-53E1-4AD2-8E3A-4BF626269DC0}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1A645832-60E5-4DA0-9EE7-69F7E34333DC}

Просмотреть файл

@ -25,6 +25,7 @@
"..\\..\\src\\Uno.Extensions.Logging\\Uno.Extensions.Logging.WinUI.Skia.csproj",
"..\\..\\src\\Uno.Extensions.Logging\\Uno.Extensions.Logging.WinUI.Wasm.csproj",
"..\\..\\src\\Uno.Extensions.Logging\\Uno.Extensions.Logging.WinUI.csproj",
"..\\..\\src\\Uno.Extensions.Navigation.Generators\\Uno.Extensions.Navigation.Generators.csproj",
"..\\..\\src\\Uno.Extensions.Navigation.Toolkit\\Uno.Extensions.Navigation.Toolkit.UI.csproj",
"..\\..\\src\\Uno.Extensions.Navigation.Toolkit\\Uno.Extensions.Navigation.Toolkit.WinUI.csproj",
"..\\..\\src\\Uno.Extensions.Navigation.UI\\Uno.Extensions.Navigation.UI.csproj",

Просмотреть файл

@ -36,6 +36,7 @@
"Uno.Extensions.Logging\\Uno.Extensions.Logging.WinUI.Skia.csproj",
"Uno.Extensions.Logging\\Uno.Extensions.Logging.WinUI.Wasm.csproj",
"Uno.Extensions.Logging\\Uno.Extensions.Logging.WinUI.csproj",
"Uno.Extensions.Navigation.Generators\\Uno.Extensions.Navigation.Generators.csproj",
"Uno.Extensions.Navigation.Toolkit\\Uno.Extensions.Navigation.Toolkit.UI.csproj",
"Uno.Extensions.Navigation.Toolkit\\Uno.Extensions.Navigation.Toolkit.WinUI.csproj",
"Uno.Extensions.Navigation.UI.Markup\\Uno.Extensions.Navigation.WinUI.Markup.csproj",
@ -62,4 +63,4 @@
"Uno.Extensions\\Uno.Extensions.csproj"
]
}
}
}

Просмотреть файл

@ -0,0 +1,68 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.CodeAnalysis;
using Uno.Extensions.Generators;
namespace Uno.Extensions.Navigation.Generators;
internal class ForceBindingsUpdateGenTool_1 : ICodeGenTool
{
/// <inheritdoc />
public string Version => "1";
private readonly ForceBindingsUpdateGenerationContext _ctx;
private readonly IAssemblySymbol _assembly;
public ForceBindingsUpdateGenTool_1(ForceBindingsUpdateGenerationContext ctx)
{
_ctx = ctx;
_assembly = ctx.Context.Compilation.Assembly;
}
private bool IsSupported(INamedTypeSymbol? type)
=> type is not null
&& (_ctx.IsGenerationEnabled(type)
?? (
type.Is(_ctx.Page) &&
type.IsPartial()
))
&& _ctx.ContainsXBind(type);
public IEnumerable<(string fileName, string code)> Generate()
{
var pages = from module in _assembly.Modules
from type in module.GetNamespaceTypes()
where
type is not null &&
IsSupported(type)
select type;
foreach (var page in pages)
{
yield return (page.ToDisplayString(), Generate(page));
}
}
private string Generate(INamedTypeSymbol model)
{
var className = model.Name;
var updateInterface = _ctx.ForceBindingsUpdateInterface.ToDisplayString();
var fileCode = this.AsPartialOf(
model,
attributes: default,
bases: updateInterface,
code: $@"
ValueTask IForceBindingsUpdate.ForceBindingsUpdateAsync()
{{
this.Bindings.Update();
return ValueTask.CompletedTask;
}}
");
return fileCode.Align(0);
}
}

Просмотреть файл

@ -0,0 +1,87 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.IO;
using System.Text.RegularExpressions;
using Microsoft.CodeAnalysis;
using Uno.Extensions.Generators;
using Uno.Extensions.Navigation.UI.Controls;
namespace Uno.Extensions.Navigation.Generators;
internal record ForceBindingsUpdateGenerationContext(
GeneratorExecutionContext Context,
// Core types
[ContextType("Uno.Extensions.Navigation.IForceBindingsUpdate")] INamedTypeSymbol ForceBindingsUpdateInterface,
// Attributes
[ContextType(typeof(ForceUpdateAttribute))] INamedTypeSymbol UpdateAttribute,
// General stuff types
[ContextType("Microsoft.UI.Xaml.Controls.Page")] INamedTypeSymbol Page)
{
public bool IsGenerationNotDisable(ISymbol symbol)
=> IsGenerationEnabled(symbol) ?? true;
public bool? IsGenerationEnabled(ISymbol symbol)
=> symbol.FindAttributeValue<bool>(UpdateAttribute, nameof(ForceUpdateAttribute.IsEnabled), 0) is { isDefined: true } attribute
? attribute.value ?? true
: null;
private IImmutableSet<string>? _XBindFiles;
private static Regex ClassRegEx = new Regex("x:Class=\"([\\w.]+)\"");
private static string xBind = "{x:Bind ";
private IImmutableSet<string> XBindFiles
{
get
{
if (_XBindFiles is null)
{
var files = ImmutableHashSet.CreateBuilder<string>();
foreach (var file in Context.AdditionalFiles)
{
using (var reader = new StreamReader(file.Path))
{
string? className = null;
var hasXBind = false;
while (
!reader.EndOfStream &&
(className is null ||
!hasXBind))
{
var txt = reader.ReadLine();
if(className is null)
{
var classNameMatch = ClassRegEx.Match(txt);
if (classNameMatch.Success &&
classNameMatch.Groups.Count > 1)
{
className = classNameMatch.Groups[1].Value;
}
}
if (txt is not null &&
txt.Contains(xBind))
{
hasXBind = true;
}
}
if(className is not null && hasXBind)
{
files.Add(className);
}
}
}
_XBindFiles = files.ToImmutableHashSet();
}
return _XBindFiles;
}
}
public bool ContainsXBind(INamedTypeSymbol symbol)
{
var name = symbol.ToDisplayString();
return XBindFiles.Contains(name);
}
}

Просмотреть файл

@ -0,0 +1,42 @@
using System;
using System.Diagnostics;
using Microsoft.CodeAnalysis;
using Uno.Extensions.Generators;
namespace Uno.Extensions.Navigation.Generators;
/// <summary>
/// A generator that generates bindable VM for the reactive framework
/// </summary>
[Generator]
public partial class ForceBindingsUpdateGenerator : ISourceGenerator
{
/// <inheritdoc />
public void Initialize(GeneratorInitializationContext context) { }
/// <inheritdoc />
public void Execute(GeneratorExecutionContext context)
{
#if DEBUGGING_GENERATOR
var process = Process.GetCurrentProcess().ProcessName;
if (process.IndexOf("VBCSCompiler", StringComparison.OrdinalIgnoreCase) is not -1
|| process.IndexOf("csc", StringComparison.OrdinalIgnoreCase) is not -1)
{
Debugger.Launch();
}
#endif
if (GenerationContext.TryGet<ForceBindingsUpdateGenerationContext>(context, out var error) is { } bindableContext)
{
foreach (var generated in new ForceBindingsUpdateGenTool_1(bindableContext).Generate())
{
context.AddSource(PathHelper.SanitizeFileName(generated.fileName) + ".g.cs", generated.code);
}
}
else
{
throw new InvalidOperationException(error);
}
}
}

Просмотреть файл

@ -0,0 +1,29 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<IsPackable>false</IsPackable>
<!--
Defines that this project output is a tool of the given package ID,
so nuget override will copy it in the 'analyzers' directory of that package instead of the 'lib' of the current package folder.
-->
<ToolOfPackage>Uno.Extensions.Navigation</ToolOfPackage>
<NoWarn>$(NoWarn);RS2008</NoWarn> <!-- RS2008: Enable analyzer release tracking for the analyzer project -->
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Uno.Roslyn" PrivateAssets="All" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" PrivateAssets="All" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\Uno.Extensions.Core\_Compat\**\*.cs" Link="_Compat\%(RecursiveDir)%(Filename)%(Extension)" />
<Compile Include="..\Uno.Extensions.Core.Generators\Common\**\*.cs" Link="Common\%(RecursiveDir)%(Filename)%(Extension)" />
<Compile Include="..\Uno.Extensions.Navigation\**\*Attribute.cs" Link="Attributes\%(RecursiveDir)%(Filename)%(Extension)" />
<Compile Include="..\Uno.Extensions.Navigation.UI\**\*Attribute.cs" Link="Attributes\%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>
</Project>

Просмотреть файл

@ -0,0 +1,24 @@
using System;
namespace Uno.Extensions.Navigation.UI.Controls;
/// <summary>
/// Flags the default constructor to use to create an instance of a record that is being de-normalized for bindings.
/// </summary>
[AttributeUsage(AttributeTargets.Class)]
public sealed class ForceUpdateAttribute : Attribute
{
/// <summary>
/// Gets a value indicating whether the method should be generated or not.
/// </summary>
public bool IsEnabled { get; }
/// <summary>
/// Configure generation the force update method.
/// </summary>
/// <param name="isEnabled">Indicates if the method should be generated or not.</param>
public ForceUpdateAttribute(bool isEnabled = true)
{
IsEnabled = isEnabled;
}
}

Просмотреть файл

@ -81,7 +81,7 @@ public static class FrameworkElementExtensions
Windows.ApplicationModel.Core.CoreApplication.MainView.DispatcherQueue;
#endif
public static async Task<bool> EnsureLoaded(this FrameworkElement? element, int? timeoutInSeconds = default)
internal static async Task<bool> EnsureLoaded(this FrameworkElement? element, int? timeoutInSeconds = default)
{
if (element is null)
{
@ -192,7 +192,7 @@ public static class FrameworkElementExtensions
return completion.Task;
}
public static void InjectServicesAndSetDataContext(
internal static async ValueTask InjectServicesAndSetDataContextAsync(
this FrameworkElement view,
IServiceProvider services,
INavigator navigation,
@ -204,6 +204,10 @@ public static class FrameworkElementExtensions
view.DataContext != viewModel)
{
view.DataContext = viewModel;
if(view is IForceBindingsUpdate updatableView)
{
await updatableView.ForceBindingsUpdateAsync();
}
}
}

Просмотреть файл

@ -56,7 +56,7 @@ public class ContentDialogNavigator : DialogNavigator
dialog.SetInstance(Region);
dialog.InjectServicesAndSetDataContext(services, navigation, viewModel);
await dialog.InjectServicesAndSetDataContextAsync(services, navigation, viewModel);
var showTask = dialog.ShowAsync();
_ = showTask.AsTask()

Просмотреть файл

@ -88,7 +88,7 @@ public abstract class ControlNavigator<TControl> : ControlNavigator
viewModel = await CreateViewModel(services, request, route, mapping);
}
view.InjectServicesAndSetDataContext(services, navigator, viewModel);
await view.InjectServicesAndSetDataContextAsync(services, navigator, viewModel);
return viewModel;
}

Просмотреть файл

@ -116,7 +116,7 @@ public class FlyoutNavigator : ControlNavigator
{
if (!injectedFlyout)
{
flyoutElement.InjectServicesAndSetDataContext(services, navigation, viewModel);
await flyoutElement.InjectServicesAndSetDataContextAsync(services, navigation, viewModel);
}
flyoutElement.SetInstance(Region);

Просмотреть файл

@ -0,0 +1,16 @@
namespace Uno.Extensions.Navigation;
/// <summary>
/// Interface that defines the ForceBindingsUpdate method which will
/// be invoked when a data context has been set on a view.
/// </summary>
public interface IForceBindingsUpdate
{
/// <summary>
/// Method to be implemented by a type so that it can be notified
/// when the data context has been set. Useful so that Bindings.Update
/// can be invoked by navigation after setting a datacontext on a page
/// </summary>
/// <returns>awaitable ValueTask</returns>
ValueTask ForceBindingsUpdateAsync();
}

Просмотреть файл

@ -16,6 +16,10 @@
<ProjectReference Include="..\Uno.Extensions.Hosting\Uno.Extensions.Hosting.csproj" />
</ItemGroup>
<ItemGroup>
<GeneratorProjectReference Include="..\Uno.Extensions.Navigation.Generators\Uno.Extensions.Navigation.Generators.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" />
<PackageReference Include="Microsoft.Extensions.Logging" />

Просмотреть файл

@ -1,5 +1,8 @@
<Project>
<ItemGroup Condition=" '$(ImplicitUsings)' == 'true' OR '$(ImplicitUsings)' == 'enable' ">
<Using Include="Uno.Extensions.Navigation" />
</ItemGroup>
</Project>
<ItemGroup>
<AdditionalFiles Include="@(Page)" />
</ItemGroup>
<ItemGroup Condition=" '$(ImplicitUsings)' == 'true' OR '$(ImplicitUsings)' == 'enable' ">
<Using Include="Uno.Extensions.Navigation" />
</ItemGroup>
</Project>

Просмотреть файл

@ -188,6 +188,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Uno.Extensions.Core.UI", "U
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Uno.Extensions.Core.WinUI", "Uno.Extensions.Core.UI\Uno.Extensions.Core.WinUI.csproj", "{FBD4CA61-6709-40BA-9E64-C34672A27568}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Uno.Extensions.Navigation.Generators", "Uno.Extensions.Navigation.Generators\Uno.Extensions.Navigation.Generators.csproj", "{2F076ADB-04CE-4C75-A63E-90A160BB4C30}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -1050,6 +1052,22 @@ Global
{FBD4CA61-6709-40BA-9E64-C34672A27568}.Release|x64.Build.0 = Release|Any CPU
{FBD4CA61-6709-40BA-9E64-C34672A27568}.Release|x86.ActiveCfg = Release|Any CPU
{FBD4CA61-6709-40BA-9E64-C34672A27568}.Release|x86.Build.0 = Release|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Debug|arm64.ActiveCfg = Debug|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Debug|arm64.Build.0 = Debug|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Debug|x64.ActiveCfg = Debug|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Debug|x64.Build.0 = Debug|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Debug|x86.ActiveCfg = Debug|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Debug|x86.Build.0 = Debug|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Release|Any CPU.Build.0 = Release|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Release|arm64.ActiveCfg = Release|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Release|arm64.Build.0 = Release|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Release|x64.ActiveCfg = Release|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Release|x64.Build.0 = Release|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Release|x86.ActiveCfg = Release|Any CPU
{2F076ADB-04CE-4C75-A63E-90A160BB4C30}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -1119,6 +1137,7 @@ Global
{2FADB746-5211-44DB-8F2B-5B4C9617290B} = {069DD21F-46E5-4379-ADF6-81AE5FCD54B5}
{F0668EB6-9C39-42A9-BE4A-AF57FD7E9A1D} = {B1477A2C-41F4-4970-8640-5CCF8DA3EDFD}
{EEF81643-E541-4298-92FF-F0AF8433C44B} = {B1477A2C-41F4-4970-8640-5CCF8DA3EDFD}
{2F076ADB-04CE-4C75-A63E-90A160BB4C30} = {2B4C9E46-EA70-4ADE-B301-E2BB8CC31365}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6E7B035D-9A64-4D95-89AA-9D4653F17C42}

Просмотреть файл

@ -24,6 +24,7 @@
"..\\..\\src\\Uno.Extensions.Logging\\Uno.Extensions.Logging.WinUI.Wasm.csproj",
"..\\..\\src\\Uno.Extensions.Logging\\Uno.Extensions.Logging.WinUI.csproj",
"..\\..\\src\\Uno.Extensions.Navigation.Toolkit\\Uno.Extensions.Navigation.Toolkit.WinUI.csproj",
"..\\..\\src\\Uno.Extensions.Navigation.Generators\\Uno.Extensions.Navigation.Generators.csproj",
"..\\..\\src\\Uno.Extensions.Navigation.UI\\Uno.Extensions.Navigation.WinUI.csproj",
"..\\..\\src\\Uno.Extensions.Navigation\\Uno.Extensions.Navigation.csproj",
"..\\..\\src\\Uno.Extensions.Reactive.Generator\\Uno.Extensions.Reactive.Generator.csproj",
@ -47,7 +48,6 @@
"TestHarness.Skia.WPF\\TestHarness.Skia.WPF.csproj",
"TestHarness.UITest\\TestHarness.UITest.csproj",
"TestHarness.Wasm\\TestHarness.Wasm.csproj",
"TestHarness.Windows.Package\\TestHarness.Windows.Package.wapproj",
"TestHarness.Windows\\TestHarness.Windows.csproj"
]
}

Просмотреть файл

@ -47,6 +47,7 @@
<ProjectReference Include="..\..\..\src\Uno.Extensions.Configuration\Uno.Extensions.Configuration.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Localization.UI\Uno.Extensions.Localization.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Core\Uno.Extensions.Core.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Core.Generators\Uno.Extensions.Core.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Hosting.UI\Uno.Extensions.Hosting.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Hosting\Uno.Extensions.Hosting.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Logging.Serilog\Uno.Extensions.Logging.Serilog.csproj" />
@ -54,8 +55,10 @@
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.Toolkit\Uno.Extensions.Navigation.Toolkit.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.UI\Uno.Extensions.Navigation.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation\Uno.Extensions.Navigation.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.Generators\Uno.Extensions.Navigation.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive.UI\Uno.Extensions.Reactive.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive\Uno.Extensions.Reactive.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive.Generator\Uno.Extensions.Reactive.Generator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Serialization.Http\Uno.Extensions.Serialization.Http.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Serialization.Refit\Uno.Extensions.Serialization.Refit.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Serialization\Uno.Extensions.Serialization.csproj" />
@ -118,6 +121,6 @@
</PropertyGroup>
<Import Project="..\..\..\src\Uno.Extensions.Core.Generators\buildTransitive\Uno.Extensions.Core.props" />
<Import Project="..\TestHarness.Shared\TestHarness.Shared.projitems" Label="Shared" />
<Import Project="..\TestHarness.Shared\TestHarness.Shared.projitems" Label="Shared" Condition="Exists('..\TestHarness.Shared\TestHarness.Shared.projitems')" />
</Project>

Просмотреть файл

@ -17,7 +17,7 @@
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<utu:NavigationBar Content="AdHoc"
<utu:NavigationBar Content="{x:Bind ViewModel.Title}"
AutomationProperties.AutomationId="AdHocOnePage" />
<StackPanel Grid.Row="1">
<Button Content="One"

Просмотреть файл

@ -1,6 +1,9 @@

namespace TestHarness.Ext.AdHoc;
// Uncomment this and the NavigationBar Title won't display
//[ForceUpdate(false)]
[ReactiveBindable(false)]
public sealed partial class AdHocOnePage : Page
{
public AdHocOneViewModel? ViewModel => DataContext as AdHocOneViewModel;

Просмотреть файл

@ -7,6 +7,7 @@ namespace TestHarness.Ext.AdHoc;
[ReactiveBindable(false)]
public partial class AdHocOneViewModel : ObservableObject
{
public string Title => "AdHocOneViewModel - From ViewModel";
private readonly IDispatcher _dispatcher;
private readonly INavigator _navigator;
private readonly ISerializer<AdHocWidget> _widgetSerializer;
@ -38,6 +39,15 @@ public partial class AdHocOneViewModel : ObservableObject
ISerializer serializer,
AdHocNeedsADispatcherService needsADispatcher)
{
#if DEBUG
// Uncomment this for an arbitrary delay when creating this constructor
// Used for testing that Bindings.Update is called when view model is
// set as DataContext -> x:Bind bindings should be updated
//for (int i = 0; i < 3000; i++)
//{
// Debug.WriteLine(i);
//}
#endif
_dispatcher = dispatcher;
_navigator = navigator;
_widgetSerializer = widgetSerializer;
@ -47,6 +57,7 @@ public partial class AdHocOneViewModel : ObservableObject
_dataService = dataService;
_serializer = serializer;
_needsADispatcher = needsADispatcher;
}
public async Task LongRunning()

Просмотреть файл

@ -29,6 +29,7 @@ global using Uno.Extensions.Localization;
global using Uno.Extensions.Logging;
global using Uno.Extensions.Navigation;
global using Uno.Extensions.Navigation.Regions;
global using Uno.Extensions.Navigation.UI.Controls;
global using Uno.Extensions.Reactive;
global using Uno.Extensions.Serialization;
global using Uno.Extensions.Validation;

Просмотреть файл

@ -45,6 +45,7 @@
<ProjectReference Include="..\..\..\src\Uno.Extensions.Configuration\Uno.Extensions.Configuration.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Localization.UI\Uno.Extensions.Localization.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Core\Uno.Extensions.Core.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Core.Generators\Uno.Extensions.Core.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Hosting.UI\Uno.Extensions.Hosting.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Hosting\Uno.Extensions.Hosting.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Logging.Serilog\Uno.Extensions.Logging.Serilog.csproj" />
@ -52,8 +53,10 @@
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.Toolkit\Uno.Extensions.Navigation.Toolkit.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.UI\Uno.Extensions.Navigation.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation\Uno.Extensions.Navigation.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.Generators\Uno.Extensions.Navigation.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive.UI\Uno.Extensions.Reactive.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive\Uno.Extensions.Reactive.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive.Generator\Uno.Extensions.Reactive.Generator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Serialization.Http\Uno.Extensions.Serialization.Http.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Serialization.Refit\Uno.Extensions.Serialization.Refit.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Serialization\Uno.Extensions.Serialization.csproj" />
@ -64,6 +67,6 @@
<ProjectReference Include="..\TestHarness.Core\TestHarness.Core.csproj" />
</ItemGroup>
<Import Project="..\..\..\src\Uno.Extensions.Core.Generators\buildTransitive\Uno.Extensions.Core.props" />
<Import Project="..\TestHarness.Shared\TestHarness.Shared.projitems" Label="Shared" />
<Import Project="..\TestHarness.Shared\TestHarness.Shared.projitems" Label="Shared" Condition="Exists('..\TestHarness.Shared\TestHarness.Shared.projitems')" />
</Project>

Просмотреть файл

@ -39,6 +39,7 @@
<ProjectReference Include="..\..\..\src\Uno.Extensions.Configuration\Uno.Extensions.Configuration.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Localization.UI\Uno.Extensions.Localization.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Core\Uno.Extensions.Core.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Core.Generators\Uno.Extensions.Core.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Hosting.UI\Uno.Extensions.Hosting.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Hosting\Uno.Extensions.Hosting.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Logging.Serilog\Uno.Extensions.Logging.Serilog.csproj" />
@ -46,8 +47,10 @@
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.Toolkit\Uno.Extensions.Navigation.Toolkit.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.UI\Uno.Extensions.Navigation.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation\Uno.Extensions.Navigation.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.Generators\Uno.Extensions.Navigation.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive.UI\Uno.Extensions.Reactive.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive\Uno.Extensions.Reactive.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive.Generator\Uno.Extensions.Reactive.Generator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Serialization.Http\Uno.Extensions.Serialization.Http.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Serialization.Refit\Uno.Extensions.Serialization.Refit.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Serialization\Uno.Extensions.Serialization.csproj" />
@ -58,5 +61,5 @@
<ProjectReference Include="..\TestHarness.Core\TestHarness.Core.csproj" />
</ItemGroup>
<Import Project="..\..\..\src\Uno.Extensions.Core.Generators\buildTransitive\Uno.Extensions.Core.props" />
<Import Project="..\TestHarness.Shared\TestHarness.Shared.projitems" Label="Shared" />
<Import Project="..\TestHarness.Shared\TestHarness.Shared.projitems" Label="Shared" Condition="Exists('..\TestHarness.Shared\TestHarness.Shared.projitems')" />
</Project>

Просмотреть файл

@ -85,6 +85,7 @@
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.Toolkit\Uno.Extensions.Navigation.Toolkit.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.UI\Uno.Extensions.Navigation.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation\Uno.Extensions.Navigation.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.Generators\Uno.Extensions.Navigation.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive.UI\Uno.Extensions.Reactive.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive\Uno.Extensions.Reactive.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive.Generator\Uno.Extensions.Reactive.Generator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />

Просмотреть файл

@ -77,6 +77,7 @@
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.Toolkit\Uno.Extensions.Navigation.Toolkit.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.UI\Uno.Extensions.Navigation.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation\Uno.Extensions.Navigation.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Navigation.Generators\Uno.Extensions.Navigation.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive.UI\Uno.Extensions.Reactive.WinUI.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive\Uno.Extensions.Reactive.csproj" />
<ProjectReference Include="..\..\..\src\Uno.Extensions.Reactive.Generator\Uno.Extensions.Reactive.Generator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
@ -91,5 +92,5 @@
</ItemGroup>
<Import Project="..\..\..\src\Uno.Extensions.Core.Generators\buildTransitive\Uno.Extensions.Core.props" />
<Import Project="..\TestHarness.Shared\TestHarness.Shared.projitems" Label="Shared" />
<Import Project="..\TestHarness.Shared\TestHarness.Shared.projitems" Label="Shared" Condition="Exists('..\TestHarness.Shared\TestHarness.Shared.projitems')" />
</Project>

Просмотреть файл

@ -206,6 +206,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Uno.Extensions.Core.UI", ".
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Uno.Extensions.Core.WinUI", "..\..\src\Uno.Extensions.Core.UI\Uno.Extensions.Core.WinUI.csproj", "{99D01288-4673-43AB-88A5-B9D42ABA7F81}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Uno.Extensions.Navigation.Generators", "..\..\src\Uno.Extensions.Navigation.Generators\Uno.Extensions.Navigation.Generators.csproj", "{87A72917-4D00-4C93-A792-1A00DFD380E6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
@ -4325,6 +4327,62 @@ Global
{99D01288-4673-43AB-88A5-B9D42ABA7F81}.Release|x64.Build.0 = Release|Any CPU
{99D01288-4673-43AB-88A5-B9D42ABA7F81}.Release|x86.ActiveCfg = Release|Any CPU
{99D01288-4673-43AB-88A5-B9D42ABA7F81}.Release|x86.Build.0 = Release|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.AppStore|Any CPU.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.AppStore|ARM.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.AppStore|ARM.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.AppStore|ARM64.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.AppStore|ARM64.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.AppStore|iPhone.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.AppStore|x64.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.AppStore|x64.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.AppStore|x86.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.AppStore|x86.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Debug|ARM.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Debug|ARM.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Debug|ARM64.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Debug|iPhone.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Debug|x64.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Debug|x64.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Debug|x86.ActiveCfg = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Debug|x86.Build.0 = Debug|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Release|Any CPU.Build.0 = Release|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Release|ARM.ActiveCfg = Release|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Release|ARM.Build.0 = Release|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Release|ARM64.ActiveCfg = Release|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Release|ARM64.Build.0 = Release|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Release|iPhone.ActiveCfg = Release|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Release|iPhone.Build.0 = Release|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Release|x64.ActiveCfg = Release|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Release|x64.Build.0 = Release|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Release|x86.ActiveCfg = Release|Any CPU
{87A72917-4D00-4C93-A792-1A00DFD380E6}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -4414,6 +4472,7 @@ Global
{DC16C151-2F93-47B8-8B67-906064B49B66} = {EAC29F11-6841-4732-88AB-BE9DC4E45D84}
{EB61C02F-B3DC-4297-9BFA-A676BE1BC652} = {3DE9532E-61E4-4B25-B0BD-B580BC63F6BD}
{99D01288-4673-43AB-88A5-B9D42ABA7F81} = {3DE9532E-61E4-4B25-B0BD-B580BC63F6BD}
{87A72917-4D00-4C93-A792-1A00DFD380E6} = {1380679E-0E34-4994-BD7F-1C848B11E761}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C7433AE2-B1A0-4C1A-887E-5CAA7AAF67A6}