diff --git a/CommunityToolkit.Authentication/ProviderManager.cs b/CommunityToolkit.Authentication/ProviderManager.cs
index b4f82ef..c0a69b4 100644
--- a/CommunityToolkit.Authentication/ProviderManager.cs
+++ b/CommunityToolkit.Authentication/ProviderManager.cs
@@ -8,14 +8,14 @@
namespace CommunityToolkit.Authentication
{
///
- /// Shared provider manager used by controls in Microsoft.Toolkit.Graph.Controls to authenticate and call the Microsoft Graph.
+ /// Shared provider manager used by controls and helpers to authenticate and call the Microsoft Graph.
///
/// To set your own existing provider:
///
- /// ProviderManager.Instance.GlobalProvider = await MsalProvider.CreateAsync(...);
+ /// ProviderManager.Instance.GlobalProvider = await new MsalProvider(clientId, scopes);
///
///
- public partial class ProviderManager
+ public partial class ProviderManager : INotifyPropertyChanged
{
///
/// Gets the name of the toolkit client to identify self in Graph calls.
@@ -37,7 +37,8 @@ public partial class ProviderManager
///
public event EventHandler ProviderStateChanged;
- private IProvider _provider;
+ ///
+ public event PropertyChangedEventHandler PropertyChanged;
///
/// Gets or sets the global provider used by all Microsoft.Toolkit.Graph.Controls.
@@ -54,7 +55,7 @@ public IProvider GlobalProvider
var oldState = _provider?.State;
if (_provider != null)
{
- _provider.StateChanged -= ProviderStateChanged;
+ _provider.StateChanged -= OnProviderStateChanged;
}
_provider = value;
@@ -62,17 +63,33 @@ public IProvider GlobalProvider
var newState = _provider?.State;
if (_provider != null)
{
- _provider.StateChanged += ProviderStateChanged;
+ _provider.StateChanged += OnProviderStateChanged;
}
ProviderUpdated?.Invoke(this, _provider);
ProviderStateChanged?.Invoke(this, new ProviderStateChangedEventArgs(oldState, newState));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(GlobalProvider)));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(State)));
}
}
+ ///
+ /// Gets the ProviderState of the current GlobalProvider instance.
+ /// Use for binding scenarios instead of ProviderManager.Instance.GlobalProvider.State.
+ ///
+ public ProviderState? State => GlobalProvider?.State;
+
+ private IProvider _provider;
+
private ProviderManager()
{
// Use Instance
}
+
+ private void OnProviderStateChanged(object sender, ProviderStateChangedEventArgs args)
+ {
+ ProviderStateChanged?.Invoke(sender, args);
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(State)));
+ }
}
}