From 93e2be4eb0acbb8923c3dd0dcbc0b4fdc78b4de5 Mon Sep 17 00:00:00 2001 From: Dan Clark Date: Sun, 24 Nov 2024 21:17:52 +0000 Subject: [PATCH] FIXES --- Toolkit.Foundation/ObservableCollection.cs | 4 +- Toolkit.Foundation/ObservableConfiguration.cs | 46 +++++++++++++------ .../ObservableConfigurationCollection.cs | 19 ++++---- Toolkit.UI.WinUI/BoolToVisibilityConverter.cs | 21 +++++++++ Toolkit.UI.WinUI/StringFormatConverter.cs | 2 +- ...verter.cs => ValidationToBoolConverter.cs} | 2 +- ...ter.cs => ValidationToMessageConverter.cs} | 2 +- 7 files changed, 69 insertions(+), 27 deletions(-) create mode 100644 Toolkit.UI.WinUI/BoolToVisibilityConverter.cs rename Toolkit.UI.WinUI/{ValidationBooleanConverter.cs => ValidationToBoolConverter.cs} (93%) rename Toolkit.UI.WinUI/{ValidationMessageConverter.cs => ValidationToMessageConverter.cs} (92%) diff --git a/Toolkit.Foundation/ObservableCollection.cs b/Toolkit.Foundation/ObservableCollection.cs index 2ab01a9..1e571af 100644 --- a/Toolkit.Foundation/ObservableCollection.cs +++ b/Toolkit.Foundation/ObservableCollection.cs @@ -612,11 +612,11 @@ public partial class ObservableCollection : Value = value; } - protected virtual void OnChanged(TValue? value) + protected virtual void Changed(TValue? value) { } - partial void OnValueChanged(TValue? value) => OnChanged(value); + partial void OnValueChanged(TValue? value) => Changed(value); } public partial class ObservableCollection : diff --git a/Toolkit.Foundation/ObservableConfiguration.cs b/Toolkit.Foundation/ObservableConfiguration.cs index 792e2a2..3eef8c0 100644 --- a/Toolkit.Foundation/ObservableConfiguration.cs +++ b/Toolkit.Foundation/ObservableConfiguration.cs @@ -1,28 +1,46 @@ using CommunityToolkit.Mvvm.Messaging; +using Microsoft.Extensions.DependencyInjection; namespace Toolkit.Foundation; -public partial class ObservableConfiguration(IServiceProvider provider, - IServiceFactory factory, - IMessenger messenger, - IDisposer disposer, - TConfiguration configuration, - IWritableConfiguration writer, - Func read, - Action write) : - Observable(provider, factory, messenger, disposer), - IHandler> +public partial class ObservableConfiguration : + Observable, + IRecipient> where TConfiguration : class { - public void Handle(ChangedEventArgs args) + private readonly TConfiguration configuration; + private readonly IWritableConfiguration writer; + private readonly Func read; + private readonly Action write; + private readonly IDispatcher dispatcher; + + public ObservableConfiguration(IServiceProvider provider, + IServiceFactory factory, + IMessenger messenger, + IDisposer disposer, + TConfiguration configuration, + IWritableConfiguration writer, + Func read, + Action write, + TValue? value = default) : base(provider, factory, messenger, disposer) + { + this.configuration = configuration; + this.writer = writer; + this.read = read; + this.write = write; + + dispatcher = provider.GetRequiredService(); + } + + public void Receive(ChangedEventArgs args) { if (args.Sender is TConfiguration configuration) { - Value = read(configuration); + dispatcher.Invoke(() => Value = read(configuration)); } } - protected override void Activated() => Value = read(configuration); + protected override void Activated() => dispatcher.Invoke(() => Value = read(configuration)); protected override void Changed(TValue? value) { @@ -30,5 +48,7 @@ public partial class ObservableConfiguration(IServicePro { writer.Write(args => write(value, args)); } + + base.Changed(value); } } \ No newline at end of file diff --git a/Toolkit.Foundation/ObservableConfigurationCollection.cs b/Toolkit.Foundation/ObservableConfigurationCollection.cs index 55f8978..13512ed 100644 --- a/Toolkit.Foundation/ObservableConfigurationCollection.cs +++ b/Toolkit.Foundation/ObservableConfigurationCollection.cs @@ -1,10 +1,11 @@ using CommunityToolkit.Mvvm.Messaging; +using Microsoft.Extensions.DependencyInjection; namespace Toolkit.Foundation; public partial class ObservableConfigurationCollection : ObservableCollection, - IHandler> + IRecipient> where TConfiguration : class where TViewModel : notnull, IDisposable @@ -13,6 +14,7 @@ public partial class ObservableConfigurationCollection read; private readonly Action write; private readonly IWritableConfiguration writer; + private readonly IDispatcher dispatcher; public ObservableConfigurationCollection(IServiceProvider provider, IServiceFactory factory, @@ -29,6 +31,7 @@ public partial class ObservableConfigurationCollection(); Value = value; } @@ -48,29 +51,27 @@ public partial class ObservableConfigurationCollection(); Value = value; } - public void Handle(ChangedEventArgs args) + public void Receive(ChangedEventArgs args) { if (args.Sender is TConfiguration configuration) { - Value = read(configuration); + dispatcher.Invoke(() => Value = read(configuration)); } } - protected override void Activated() - { - Value = read(configuration); - } + protected override void Activated() => dispatcher.Invoke(() => Value = read(configuration)); - protected override void OnChanged(TValue? value) + protected override void Changed(TValue? value) { if (IsActive) { writer.Write(args => write(value, args)); } - base.OnChanged(value); + base.Changed(value); } } diff --git a/Toolkit.UI.WinUI/BoolToVisibilityConverter.cs b/Toolkit.UI.WinUI/BoolToVisibilityConverter.cs new file mode 100644 index 0000000..23c9228 --- /dev/null +++ b/Toolkit.UI.WinUI/BoolToVisibilityConverter.cs @@ -0,0 +1,21 @@ +using Microsoft.UI.Xaml; +using System; + +namespace Toolkit.UI.WinUI; + +public class BoolToVisibilityConverter : + ValueConverter +{ + public Visibility TrueValue { get; set; } = Visibility.Visible; + + public Visibility FalseValue { get; set; } = Visibility.Collapsed; + + protected override Visibility ConvertTo(bool value, + Type? targetType, + object? parameter, + string? language) + { + _ = bool.TryParse(value.ToString(), out bool parsed); + return parsed ? TrueValue : FalseValue; + } +} diff --git a/Toolkit.UI.WinUI/StringFormatConverter.cs b/Toolkit.UI.WinUI/StringFormatConverter.cs index ccc77ee..ff2f365 100644 --- a/Toolkit.UI.WinUI/StringFormatConverter.cs +++ b/Toolkit.UI.WinUI/StringFormatConverter.cs @@ -26,4 +26,4 @@ public class StringFormatConverter : return value; } } -} +} \ No newline at end of file diff --git a/Toolkit.UI.WinUI/ValidationBooleanConverter.cs b/Toolkit.UI.WinUI/ValidationToBoolConverter.cs similarity index 93% rename from Toolkit.UI.WinUI/ValidationBooleanConverter.cs rename to Toolkit.UI.WinUI/ValidationToBoolConverter.cs index 91979e8..ef8c288 100644 --- a/Toolkit.UI.WinUI/ValidationBooleanConverter.cs +++ b/Toolkit.UI.WinUI/ValidationToBoolConverter.cs @@ -3,7 +3,7 @@ using Toolkit.Foundation; namespace Toolkit.UI.WinUI; -public class ValidationBooleanConverter : +public class ValidationToBoolConverter : ValueConverter, bool> { public string? Property { get; set; } diff --git a/Toolkit.UI.WinUI/ValidationMessageConverter.cs b/Toolkit.UI.WinUI/ValidationToMessageConverter.cs similarity index 92% rename from Toolkit.UI.WinUI/ValidationMessageConverter.cs rename to Toolkit.UI.WinUI/ValidationToMessageConverter.cs index 4f634d2..af51c7b 100644 --- a/Toolkit.UI.WinUI/ValidationMessageConverter.cs +++ b/Toolkit.UI.WinUI/ValidationToMessageConverter.cs @@ -3,7 +3,7 @@ using Toolkit.Foundation; namespace Toolkit.UI.WinUI; -public class ValidationMessageConverter : +public class ValidationToMessageConverter : ValueConverter, string?> { public string? Property { get; set; }