Skip to content

Commit

Permalink
adding DialogService fixes #1814
Browse files Browse the repository at this point in the history
  • Loading branch information
dansiegel committed Jun 6, 2019
1 parent 428df87 commit 32e3fda
Show file tree
Hide file tree
Showing 36 changed files with 1,331 additions and 8 deletions.
4 changes: 4 additions & 0 deletions Sandbox/Xamarin/HelloWorld/HelloWorld/HelloWorld/App.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using HelloWorld.ViewModels;
using HelloWorld.Views;
using Prism;
using Prism.Ioc;
Expand Down Expand Up @@ -70,6 +71,9 @@ protected override void RegisterTypes(IContainerRegistry containerRegistry)
containerRegistry.RegisterForNavigation<NavigationPage>();
containerRegistry.RegisterForNavigation<MyNavigationPage>();
containerRegistry.RegisterForNavigation<MyMasterDetail>();
containerRegistry.RegisterForNavigation<DialogDemoPage, DialogDemoPageViewModel>();
containerRegistry.RegisterDialog<DemoDialog, DemoDialogViewModel>();
containerRegistry.RegisterDialog<UserAlert, UserAlertViewModel>();
}

protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
Expand Down
24 changes: 24 additions & 0 deletions Sandbox/Xamarin/HelloWorld/HelloWorld/HelloWorld/HelloWorld.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,28 @@
<ProjectReference Include="..\..\..\..\..\Source\Xamarin\Prism.DryIoc.Forms\Prism.DryIoc.Forms.csproj" />
<ProjectReference Include="..\..\ModuleA\ModuleA.csproj" />
</ItemGroup>

<ItemGroup>
<Compile Update="Strings\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>

<ItemGroup>
<EmbeddedResource Update="Strings\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Update="Views\DemoDialog.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Update="Views\DialogDemoPage.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Update="Views\UserAlert.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
</ItemGroup>
</Project>

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="LoremIpsum" xml:space="preserve">
<value>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut molestie hendrerit magna, id dictum nulla dignissim id. Praesent ullamcorper arcu augue, a imperdiet lacus interdum id. Sed ultrices, leo sed vehicula rutrum, nunc nulla varius leo, sed facilisis libero ante vel diam. Quisque porttitor leo non ex tincidunt laoreet. Mauris in est elementum, accumsan nisi non, malesuada nisi. Pellentesque vel nisl sed dolor aliquet vehicula in a sapien. Quisque est tortor, venenatis accumsan aliquet eget, tempor vitae nulla.
Donec varius sed turpis et pretium. Proin urna eros, feugiat sed sem condimentum, mattis rhoncus sapien. Fusce vulputate magna ut neque dignissim tempor. Sed finibus tellus a justo dignissim gravida. Pellentesque sit amet sem sit amet nunc blandit accumsan. In dignissim turpis eget porta imperdiet. Vestibulum mattis ex elementum lacinia dapibus. Quisque ut mauris sit amet ligula venenatis blandit a sed libero. </value>
</data>
</root>
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using Prism.Services.Dialogs;
using Prism.Navigation;

namespace HelloWorld.ViewModels
{
public class DemoDialogViewModel : BindableBase, IDialogAware, IAutoInitialize
{
public DemoDialogViewModel()
{
CloseCommand = new DelegateCommand(() => RequestClose(null));
}

private string title = "Message";
public string Title
{
get => title;
set => SetProperty(ref title, value);
}

private string message;
[DialogParameter(true)]
public string Message
{
get => message;
set => SetProperty(ref message, value);
}

public DelegateCommand CloseCommand { get; }

public event Action<IDialogParameters> RequestClose;

public bool CanCloseDialog() => true;

public void OnDialogClosed()
{
Console.WriteLine("The Demo Dialog has been closed...");
}

public void OnDialogOpened(IDialogParameters parameters)
{

}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using Prism.Commands;
using Prism.Mvvm;
using Prism.Services;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;

namespace HelloWorld.ViewModels
{
public class DialogDemoPageViewModel : BindableBase
{
private IPageDialogService _pageDialogService { get; }
public DialogDemoPageViewModel(IDialogService dialogService, IPageDialogService pageDialogService)
{
_pageDialogService = pageDialogService;

ShowUserAlertCommand = new DelegateCommand(() => dialogService.ShowDialog("UserAlert", OnAlertClosed));
}

public DelegateCommand ShowUserAlertCommand { get; }

private async void OnAlertClosed(IDialogResult result)
{
await _pageDialogService.DisplayAlertAsync("Success", $"You entered {result.Parameters.GetValue<string>("name")}", "Ok");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
using Prism.Commands;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;

namespace HelloWorld.ViewModels
{
public class UserAlertViewModel : BindableBase, IDialogAware
{
public UserAlertViewModel()
{
SubmitCommand = new DelegateCommand(ExecuteSubmitCommand, CanCloseDialog)
.ObservesProperty(() => Name);
}

private string name;
public string Name
{
get => name;
set => SetProperty(ref name, value);
}

public DelegateCommand SubmitCommand { get; }

public event Action<IDialogParameters> RequestClose;

private void ExecuteSubmitCommand()
{
var dialogParams = new DialogParameters
{
{ "name", Name }
};
RequestClose(dialogParams);
}

public bool CanCloseDialog()
{
return !string.IsNullOrWhiteSpace(Name) && Name.Length > 2;
}

public void OnDialogClosed()
{
Console.WriteLine($"User Alert Closed with Name: {Name}");
}

public void OnDialogOpened(IDialogParameters parameters)
{

}
}
}
Loading

0 comments on commit 32e3fda

Please sign in to comment.