Describe the problem this feature would solve
The GraphPresenter requires an IBaseRequestBuilder implementation to determine what data to fetch from Graph. We don't currently have a good way to define the RequestBuilder property in XAML, so this must be done from code. The problem is that if the provider state changes after the RequestBuilder property is set, the GraphPresenter will fail. The way to fix this is to nullify the RequestBuilder, and then re-set it.
Describe the solution
Update the GraphPresenter to listen for changes in the global provider state, and do whatever is required to keep the control functional after a login change.
The GraphPresenter should not display any content if the global provider is not signed in.
Describe alternatives you've considered
None
Additional context & Screenshots
All of this code is required to support a single instance of the GraphPresenter control:
namespace SampleTest.Samples.GraphPresenter
{
public sealed partial class MailMessagesSample : Page
{
public IBaseRequestBuilder MessagesRequestBuilder { get; set; }
public MailMessagesSample()
{
this.InitializeComponent();
ProviderManager.Instance.ProviderUpdated += OnProviderUpdated;
ProviderManager.Instance.ProviderStateChanged += OnProviderStateChanged;
}
private void OnProviderUpdated(object sender, IProvider provider)
{
if (provider == null)
{
ClearRequestBuilders();
}
}
private void OnProviderStateChanged(object sender, ProviderStateChangedEventArgs e)
{
if (e.NewState == ProviderState.SignedIn)
{
var graphClient = ProviderManager.Instance.GlobalProvider.GetClient();
MessagesRequestBuilder = graphClient.Me.Messages;
}
else
{
ClearRequestBuilders();
}
}
private void ClearRequestBuilders()
{
MessagesRequestBuilder = null;
}
}
}
<controls:GraphPresenter
IsCollection="True"
RequestBuilder="{x:Bind MessagesRequestBuilder, Mode=OneWay}"
ResponseType="graph:Message">
<controls:GraphPresenter.ContentTemplate>
<DataTemplate>
...
</DataTemplate>
</controls:GraphPresenter.ContentTemplate>
</controls:GraphPresenter>
Describe the problem this feature would solve
The
GraphPresenterrequires anIBaseRequestBuilderimplementation to determine what data to fetch from Graph. We don't currently have a good way to define theRequestBuilderproperty in XAML, so this must be done from code. The problem is that if the provider state changes after theRequestBuilderproperty is set, theGraphPresenterwill fail. The way to fix this is to nullify theRequestBuilder, and then re-set it.Describe the solution
Update the
GraphPresenterto listen for changes in the global provider state, and do whatever is required to keep the control functional after a login change.The
GraphPresentershould not display any content if the global provider is not signed in.Describe alternatives you've considered
None
Additional context & Screenshots
All of this code is required to support a single instance of the
GraphPresentercontrol: