<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wikitest.augmensys.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BLE</id>
		<title>UBIK Wiki Test / Augmensys - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wikitest.augmensys.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BLE"/>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Special:Contributions/BLE"/>
		<updated>2026-05-01T15:15:12Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.5_(Xamarin)&amp;diff=25314</id>
		<title>Version 4.5 (Xamarin)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.5_(Xamarin)&amp;diff=25314"/>
				<updated>2023-08-30T07:53:17Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: Created page with &amp;quot;{{Attention|UBIK 4 clients can only connect to {{UBIK}} Servers of version 3.6 and higher!}}  == Availability ==  &amp;lt;br/&amp;gt;   {{Attention|Some customized X...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|UBIK 4 clients can only connect to {{UBIK}} Servers of [[Version 3.6(Server)|version 3.6]] and higher!}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with a ⚠️}}&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
=== 4.5.0 ===&lt;br /&gt;
* Chinese characters are now supported on Map Poi Pins.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.4_(WinX)&amp;diff=25270</id>
		<title>Version 4.4 (WinX)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.4_(WinX)&amp;diff=25270"/>
				<updated>2023-08-22T11:16:15Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* 4.4.? on 2023-08-? {{key press|App Center}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|This version requires [https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1809_(October_2018_Update) Windows 10 build 17763] or higher}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Store}}: Publicly available in Microsoft Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Store Beta}}: Publicly available in Microsoft Store as beta versions to those whose account email is included in our beta program. Please contact the Augmensys staff and submit your chosen email address if you would like to join.&lt;br /&gt;
&lt;br /&gt;
{{key press|App Center}}: Available to those who have access to the Augmensys App Center.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with ⚠️}}&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
===4.4.? on 2023-08-? {{key press|App Center}}===&lt;br /&gt;
* General improvements on app stability.&lt;br /&gt;
* Fixed an issue where the App randomly crashed when editing tasks in quick succession.&lt;br /&gt;
* Fixed an issue where the InvokeOnItemsCommand would only be applied to selected items.&lt;br /&gt;
* Fixed a bug where cancelling the editing of a geo property was not reflected in the UI.&lt;br /&gt;
* Fixed an issue where the import of broken profiles was not prevented properly.&lt;br /&gt;
* Fixed an issue where editing a value on a Guid List Dialog would not be possible on Windows 11.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.4 (WinX)]]&lt;br /&gt;
&lt;br /&gt;
===4.4.12 on 2023-08-08 {{key press|App Center}}===&lt;br /&gt;
* Fixed an issue where profiles could not be loaded when the name of the profile was too long.&lt;br /&gt;
* Fixed an issue where after editing authentication properties an unwanted backward navigation occurred.&lt;br /&gt;
* Fixed an issue where some download indicators were missing on document tiles.&lt;br /&gt;
* Fixed some UI issues when trying to edit GeoData or DateTime Properties.&lt;br /&gt;
* Fixed an issue where the NavigationView sidebar navigational buttons were clipped on the right edge, and updated its core styles and application in main content areas.&lt;br /&gt;
* Fixed an issue where too many root object overlapped the navigational buttons on the sidebar.&lt;br /&gt;
* Fixed an issue where only up to 9 root items could be displayed on the root area.&lt;br /&gt;
* Fixed a distance calculation error when opening the POI page without a current location.&lt;br /&gt;
* Fixed an issue where a Guid link property value appears empty after you close the Guid editor.&lt;br /&gt;
* Fixed an issue where the entered property value does not appear to be set if you open the editor while being in a direct edit session at the same time.&lt;br /&gt;
* Fixed an issue where saving signatures on unusual display sizes would not be possible.&lt;br /&gt;
* Fixed an issue where saving signatures on Windows 11 would not be possible.&lt;br /&gt;
* Fixed an issue where the selected property value definition (on offline query criteria) can be lost or incorrectly displayed.&lt;br /&gt;
* Partially fixed an issue where PDF text search highlights are sometimes poorly positioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.10 on 2023-07-19 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where the wrong page might be displayed when you navigate to a PDF hotspot.&lt;br /&gt;
* Fixed an issue where the PDF hotspot is not highlighted when you navigate to it.&lt;br /&gt;
* Fixed an issue where predefined search texts are not automatically highlighted for certain complex PDF documents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.9 on 2023-07-18 {{key press|App Center}} ===&lt;br /&gt;
* The undo and redo operations in the builtin PDF viewer can be [[XAML#UBIKPdfViewer|enabled/disabled]].&lt;br /&gt;
* Fixed an issue where the parent work package of grouped tasks might display a progress over 100%.&lt;br /&gt;
* Fixed an issue where work packages can not be confirmed because the calculated progress is only close to 100% due to the lost of precision.&lt;br /&gt;
* Fixed an issue where the client incorrectly updates/saves hotspots on PDF documents (e.g. even when you simply browse to a PDF document).&lt;br /&gt;
* Fixed an issue where property based content filtering would not apply after pressing the apply filter button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.8 on 2023-07-07 {{key press|App Center}} ===&lt;br /&gt;
* Replaced WebView with [https://learn.microsoft.com/en-us/microsoft-edge/webview2/get-started/winui2#step-6---instantiate-the-webview2-control-in-xaml-code WebView2] for URL documents in the standard UI.&lt;br /&gt;
* Fixed an issue where the default tab is not always automatically applied in a content page.&lt;br /&gt;
* Fixed an issue where the default tab is unnecessarily applied in a content page when the context object is committed.&lt;br /&gt;
* Fixed an issue where the app freezes upon logging out of certain services.&lt;br /&gt;
* Fixed an issue where downloading grouped sequential tasks can lead to app crashes.&lt;br /&gt;
* Fixed an issue where the UBIKContentArea/UBIKChildArea template can be incorrectly used to display child items.&lt;br /&gt;
* Fixed an issue where browsing to self linking objects lead to app crashes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.4 on 2023-06-21 {{key press|App Center}} ===&lt;br /&gt;
* Added the Lazy Loading Query Classification that can prevent unwanted re-evaluation of queries.&lt;br /&gt;
* A [[XAML_Tips#TeachInCommand|TeachInCommand]] is now available in ContentViewModel and PropertyViewModel to set the device's current location as the geo property value.&lt;br /&gt;
* Certain objects can now carry multiple scan codes ([[SYSCLS_OBJECTWITHIDMARKERS|optical]] or [[SYSCLS_OBJECTWITHRFIDTAGS|RFID]]) so that scanning any one of them finds the object.&lt;br /&gt;
* The app can now [[Documents_(Client)#PDF_Text_Search|automatically search for predefined texts when opening certain PDF documents]].&lt;br /&gt;
* Fixed an issue where selected items get deselected after being mass edited in auto sync mode.&lt;br /&gt;
* Fixed an issue where the embedded PDF viewer's horizontal scrollbar does not allow you to view the entire page when pages have different dimensions.&lt;br /&gt;
* Fixed an issue where certain direct editing UI (RatingControl) doesn't work and the input value can never be saved. See [[Property_Direct_Edit_(Client)#ValueItem.PropertyValue_or_ValueItem.PropertyValueSessionless|property direct edit]] for more details.&lt;br /&gt;
* Fixed some issues where the status update results of sequential tasks are incorrect under certain circumstances.&lt;br /&gt;
* Fixed an issue where deleting/changing certain inputs during property editing is no possible.&lt;br /&gt;
* Fixed an issue where persisting property based filters might lead to some unexpected errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* During PDF annotating/hotspotting, changes are lost if you leave the page without deselecting the changed annotation/hotspot.&lt;br /&gt;
* Free Text Annotations that where created in former sessions cannot be selected and therefore cannot be edited any more.&lt;br /&gt;
* Selective list values are sometimes lost during editing on Windows 11 devices.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes  =&lt;br /&gt;
&lt;br /&gt;
* ⚠️NavigationView: Due to a XAML Toolkit upgrade, the items at the bottom of the global sidebar appear clipped. At the same time, the NavigationView styling was streamlined in both UBIKThemes, and the content areas (UBIKContentArea, UBIKRootArea, UBIKDocumentArea, UBIKQueryArea). Already-existing customized versions of these pages will need to be adapted to see these changes. In rare cases, the Navigation View in already existing customized templates will appear broken (white background, reduced functionality) and require conversion.&lt;br /&gt;
{{Expander|indent=22px|heading=Steps to Conversion|content=&lt;br /&gt;
*&amp;lt;b&amp;gt;Step 1:&amp;lt;/b&amp;gt; For each custom; UBIKContentArea, UBIKRootArea, UBIKDocumentArea, UBIKQueryArea:&lt;br /&gt;
** Remove the &amp;lt;muxc:NavigationView ...&amp;gt; and inline notes.&lt;br /&gt;
** Replace it with the ContentControl that references the new UBIKNavigationView as it's template found in any of the default area templates named above), and optionally the xaml notes, documented below.&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&amp;lt;!-- &lt;br /&gt;
 	From 4.4 The NavigationView has been restructured to require less xaml customizing.&lt;br /&gt;
 	A single template (UBIKNavigationView) is now defined in UBIKThemes, and referenced via ContentControl in UBIKRootArea, UBIKContentArea, UBIKQueryArea, UBIKDocumentArea.&lt;br /&gt;
 	The page content is now simply inserted as a child of the ContentControl.&lt;br /&gt;
 --&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;ContentControl Template=&amp;quot;{StaticResource UBIKNavigationView}&amp;quot;&amp;gt;&lt;br /&gt;
Do not forget to also convert the closing tag at the end of the xaml.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Step 2:&amp;lt;/b&amp;gt; Unfortunately, due to the way our themes are loaded, we need to include the new items in our custom UBIKThemes in order for customized color resources, like UBIKAccentColor, to be reflected on the NavigationView (otherwise it will always be standard orange).&lt;br /&gt;
** We also need to remove the old customizing to prevent interference of these styles.&lt;br /&gt;
** Clean up your UBIKThemes by removing all of the standard customizing from before the update. The easiest way is to;&lt;br /&gt;
*** Search in your custom UBIKThemes.xaml for the NavigationView section (you can find it between the tags: &amp;lt;!--#region NAVIGATION VIEW--&amp;gt;) and remove all the contents from this region.&lt;br /&gt;
*** Use Developer Mode to unpack or access the newest standard UBIKThemes, and paste in the two following items in their entirety (make sure you get the entire item, until its closing tag):&lt;br /&gt;
 &amp;lt;Style x:Key=&amp;quot;UBIKPaneToggleButtonStyle&amp;quot;...&amp;gt;&amp;lt;/Style&amp;gt;&lt;br /&gt;
 &amp;lt;ControlTemplate x:Key=&amp;quot;UBIKNavigationView&amp;quot;&amp;gt;...&amp;lt;/ControlTemplate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
* More than 8-10 root items overflowed the navigational sidebar buttons in the updated NavigationView described above. The fix was applied to the UBIKGlobalSideBarButtons template for least chance of conflicting with a customized template. If your project has a customized version of this template and more than 8-10 items, please copy the Height attribute and VisualStateManager from the new default template.&lt;br /&gt;
* Invalid value indicator in [[Property_Direct_Edit_(Client)#ValueItem.PropertyValue_or_ValueItem.PropertyValueSessionless|property direct edit]] moved from UBIKPropertyDirectItemTextBox.xaml and UBIKPropertyDirectItemGeoData.xaml into UBIKPropertyDirectItemContainer.xaml to unify for all properties.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.4 (WinX)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.4_(WinX)&amp;diff=25161</id>
		<title>Version 4.4 (WinX)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.4_(WinX)&amp;diff=25161"/>
				<updated>2023-08-08T11:59:47Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* 4.4.? on 2023-08-? {{key press|App Center}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|This version requires [https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1809_(October_2018_Update) Windows 10 build 17763] or higher}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Store}}: Publicly available in Microsoft Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Store Beta}}: Publicly available in Microsoft Store as beta versions to those whose account email is included in our beta program. Please contact the Augmensys staff and submit your chosen email address if you would like to join.&lt;br /&gt;
&lt;br /&gt;
{{key press|App Center}}: Available to those who have access to the Augmensys App Center.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with ⚠️}}&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
===4.4.? on 2023-08-? {{key press|App Center}}===&lt;br /&gt;
* Fixed an issue where profiles could not be loaded when the name of the profile was too long.&lt;br /&gt;
* Fixed an issue where after editing authentication properties an unwanted backward navigation occurred.&lt;br /&gt;
* Fixed an issue where some download indicators were missing on document tiles.&lt;br /&gt;
* Fixed some UI issues when trying to edit GeoData or DateTime Properties.&lt;br /&gt;
* Fixed an issue where the NavigationView sidebar navigational buttons were clipped on the right edge, and updated its core styles and application in main content areas.&lt;br /&gt;
* Fixed an issue where too many root object overlapped the navigational buttons on the sidebar.&lt;br /&gt;
* Fixed an issue where only up to 9 root items could be displayed on the root area.&lt;br /&gt;
* Fixed a distance calculation error when opening the POI page without a current location.&lt;br /&gt;
* Fixed an issue where a Guid link property value appears empty after you close the Guid editor.&lt;br /&gt;
* Fixed an issue where the entered property value does not appear to be set if you open the editor while being in a direct edit session at the same time.&lt;br /&gt;
* Fixed an issue where saving signatures on unusual display sizes would not be possible.&lt;br /&gt;
* Fixed an issue where saving signatures on Windows 11 would not be possible.&lt;br /&gt;
* Fixed an issue where the selected property value definition (on offline query criteria) can be lost or incorrectly displayed.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.4 (WinX)]]&lt;br /&gt;
&lt;br /&gt;
=== 4.4.10 on 2023-07-19 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where the wrong page might be displayed when you navigate to a PDF hotspot.&lt;br /&gt;
* Fixed an issue where the PDF hotspot is not highlighted when you navigate to it.&lt;br /&gt;
* Fixed an issue where predefined search texts are not automatically highlighted for certain complex PDF documents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.9 on 2023-07-18 {{key press|App Center}} ===&lt;br /&gt;
* The undo and redo operations in the builtin PDF viewer can be [[XAML#UBIKPdfViewer|enabled/disabled]].&lt;br /&gt;
* Fixed an issue where the parent work package of grouped tasks might display a progress over 100%.&lt;br /&gt;
* Fixed an issue where work packages can not be confirmed because the calculated progress is only close to 100% due to the lost of precision.&lt;br /&gt;
* Fixed an issue where the client incorrectly updates/saves hotspots on PDF documents (e.g. even when you simply browse to a PDF document).&lt;br /&gt;
* Fixed an issue where property based content filtering would not apply after pressing the apply filter button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.8 on 2023-07-07 {{key press|App Center}} ===&lt;br /&gt;
* Replaced WebView with [https://learn.microsoft.com/en-us/microsoft-edge/webview2/get-started/winui2#step-6---instantiate-the-webview2-control-in-xaml-code WebView2] for URL documents in the standard UI.&lt;br /&gt;
* Fixed an issue where the default tab is not always automatically applied in a content page.&lt;br /&gt;
* Fixed an issue where the default tab is unnecessarily applied in a content page when the context object is committed.&lt;br /&gt;
* Fixed an issue where the app freezes upon logging out of certain services.&lt;br /&gt;
* Fixed an issue where downloading grouped sequential tasks can lead to app crashes.&lt;br /&gt;
* Fixed an issue where the UBIKContentArea/UBIKChildArea template can be incorrectly used to display child items.&lt;br /&gt;
* Fixed an issue where browsing to self linking objects lead to app crashes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.4 on 2023-06-21 {{key press|App Center}} ===&lt;br /&gt;
* Added the Lazy Loading Query Classification that can prevent unwanted re-evaluation of queries.&lt;br /&gt;
* A [[XAML_Tips#TeachInCommand|TeachInCommand]] is now available in ContentViewModel and PropertyViewModel to set the device's current location as the geo property value.&lt;br /&gt;
* Certain objects can now carry multiple scan codes ([[SYSCLS_OBJECTWITHIDMARKERS|optical]] or [[SYSCLS_OBJECTWITHRFIDTAGS|RFID]]) so that scanning any one of them finds the object.&lt;br /&gt;
* The app can now [[Documents_(Client)#PDF_Text_Search|automatically search for predefined texts when opening certain PDF documents]].&lt;br /&gt;
* Fixed an issue where selected items get deselected after being mass edited in auto sync mode.&lt;br /&gt;
* Fixed an issue where the embedded PDF viewer's horizontal scrollbar does not allow you to view the entire page when pages have different dimensions.&lt;br /&gt;
* Fixed an issue where certain direct editing UI (RatingControl) doesn't work and the input value can never be saved. See [[Property_Direct_Edit_(Client)#ValueItem.PropertyValue_or_ValueItem.PropertyValueSessionless|property direct edit]] for more details.&lt;br /&gt;
* Fixed some issues where the status update results of sequential tasks are incorrect under certain circumstances.&lt;br /&gt;
* Fixed an issue where deleting/changing certain inputs during property editing is no possible.&lt;br /&gt;
* Fixed an issue where persisting property based filters might lead to some unexpected errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* During PDF annotating/hotspotting, changes are lost if you leave the page without deselecting the changed annotation/hotspot.&lt;br /&gt;
* Free Text Annotations that where created in former sessions cannot be selected and therefore cannot be edited any more.&lt;br /&gt;
* Selective list values are sometimes lost during editing on Windows 11 devices.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes  =&lt;br /&gt;
&lt;br /&gt;
* ⚠️NavigationView: Due to a XAML Toolkit upgrade, the items at the bottom of the global sidebar appear clipped. At the same time, the NavigationView styling was streamlined in both UBIKThemes, and the content areas (UBIKContentArea, UBIKRootArea, UBIKDocumentArea, UBIKQueryArea). Already-existing customized versions of these pages will need to be adapted to see these changes. In rare cases, the Navigation View in already existing customized templates will appear broken (white background, reduced functionality) and require conversion.&lt;br /&gt;
{{Expander|indent=22px|heading=Steps to Conversion|content=&lt;br /&gt;
*&amp;lt;b&amp;gt;Step 1:&amp;lt;/b&amp;gt; For each custom; UBIKContentArea, UBIKRootArea, UBIKDocumentArea, UBIKQueryArea:&lt;br /&gt;
** Remove the &amp;lt;muxc:NavigationView ...&amp;gt; and inline notes.&lt;br /&gt;
** Replace it with the ContentControl that references the new UBIKNavigationView as it's template found in any of the default area templates named above), and optionally the xaml notes, documented below.&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&amp;lt;!-- &lt;br /&gt;
 	From 4.4 The NavigationView has been restructured to require less xaml customizing.&lt;br /&gt;
 	A single template (UBIKNavigationView) is now defined in UBIKThemes, and referenced via ContentControl in UBIKRootArea, UBIKContentArea, UBIKQueryArea, UBIKDocumentArea.&lt;br /&gt;
 	The page content is now simply inserted as a child of the ContentControl.&lt;br /&gt;
 --&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;ContentControl Template=&amp;quot;{StaticResource UBIKNavigationView}&amp;quot;&amp;gt;&lt;br /&gt;
Do not forget to also convert the closing tag at the end of the xaml.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Step 2:&amp;lt;/b&amp;gt; Unfortunately, due to the way our themes are loaded, we need to include the new items in our custom UBIKThemes in order for customized color resources, like UBIKAccentColor, to be reflected on the NavigationView (otherwise it will always be standard orange).&lt;br /&gt;
** We also need to remove the old customizing to prevent interference of these styles.&lt;br /&gt;
** Clean up your UBIKThemes by removing all of the standard customizing from before the update. The easiest way is to;&lt;br /&gt;
*** Search in your custom UBIKThemes.xaml for the NavigationView section (you can find it between the tags: &amp;lt;!--#region NAVIGATION VIEW--&amp;gt;) and remove all the contents from this region.&lt;br /&gt;
*** Use Developer Mode to unpack or access the newest standard UBIKThemes, and paste in the two following items in their entirety (make sure you get the entire item, until its closing tag):&lt;br /&gt;
 &amp;lt;Style x:Key=&amp;quot;UBIKPaneToggleButtonStyle&amp;quot;...&amp;gt;&amp;lt;/Style&amp;gt;&lt;br /&gt;
 &amp;lt;ControlTemplate x:Key=&amp;quot;UBIKNavigationView&amp;quot;&amp;gt;...&amp;lt;/ControlTemplate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
* More than 8-10 root items overflowed the navigational sidebar buttons in the updated NavigationView described above. The fix was applied to the UBIKGlobalSideBarButtons template for least chance of conflicting with a customized template. If your project has a customized version of this template and more than 8-10 items, please copy the Height attribute and VisualStateManager from the new default template.&lt;br /&gt;
* Invalid value indicator in [[Property_Direct_Edit_(Client)#ValueItem.PropertyValue_or_ValueItem.PropertyValueSessionless|property direct edit]] moved from UBIKPropertyDirectItemTextBox.xaml and UBIKPropertyDirectItemGeoData.xaml into UBIKPropertyDirectItemContainer.xaml to unify for all properties.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.4 (WinX)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.4_(Xamarin)&amp;diff=25036</id>
		<title>Version 4.4 (Xamarin)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.4_(Xamarin)&amp;diff=25036"/>
				<updated>2023-08-03T10:22:05Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* 4.4.? on 2023-07-? {{key press|App Center}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|UBIK 4 clients can only connect to {{UBIK}} Servers of [[Version 3.6(Server)|version 3.6]] and higher!}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Android: Store}}{{key press|iOS: Store}}: Publicly available in Google Play Store / Apple App Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Beta}}: Publicly available in Google Play Store as beta versions. You can opt in or out of the beta at any time in the store.&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Beta}}: Available through Apple App Store's [https://testflight.apple.com/join/ijGm4j2h invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|UWP: App Center}}{{key press|Android: App Center}}{{key press|iOS: App Center}}: Available to those who have access to the Augmensys App Center.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with a ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
=== 4.4.? on 2023-07-? {{key press|App Center}} ===&lt;br /&gt;
* PDF annotations are now automatically saved when you close the page just like with other regular content.&lt;br /&gt;
* Fixed an issue where work packages can not be confirmed because the calculated progress is only close to 100% due to the lost of precision.&lt;br /&gt;
* Fixed an issue where values do not get saved/committed when clicking on the check button of a task item.&lt;br /&gt;
* Fixed an issue where the client incorrectly updates/saves hotspots on PDF documents (e.g. even when you simply browse to a PDF document).&lt;br /&gt;
* Fixed an issue where PDF annotations and hotspots are incorrectly locked to users who created them but later log in with the same usernames in different cases.&lt;br /&gt;
* Fixed an issue where property based content filtering would not apply after pressing the apply filter button.&lt;br /&gt;
* Fixed an issue where PDF (horizontal) text search highlights are sometimes poorly positioned.&lt;br /&gt;
* Fixed an issue where profiles could not be loaded when the name of the profile was too long.&lt;br /&gt;
* Fixed an issue where after editing authentication properties an unwanted backward navigation occurred.&lt;br /&gt;
* Fixed an issue where you can not open the settings page on the first start of a freshly installed app.&lt;br /&gt;
* Fixed some UI issues when trying to edit GeoData or DateTime Properties.&lt;br /&gt;
* Fixed an issue where a Guid link property value appears empty after you close the Guid editor.&lt;br /&gt;
* Fixed an issue on iOS that limited NFC tag scanning to only be done once per session.&lt;br /&gt;
* Fixed an issue where the tech warning icon was at the false place.&lt;br /&gt;
* Fixed an issues with permissions on Android 13 that caused file import and notifications to not work anymore.&lt;br /&gt;
* Fixed an issue where adding a comma to existing values in the Double editor wasn't possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.4 Xamarin]]&lt;br /&gt;
&lt;br /&gt;
=== 4.4.19 on 2023-07-07 {{key press|iOS: App Center}} ===&lt;br /&gt;
=== 4.4.18 on 2023-07-07 {{key press|Android: App Center}} {{key press|UWP: App Center}} ===&lt;br /&gt;
* Fixed an issue where it's impossible to open settings again after deleting all profiles.&lt;br /&gt;
* (Android) Fixed an issue where the app hangs on first start after installation.&lt;br /&gt;
* Fixed an issue where the app freezes upon logging out of certain services.&lt;br /&gt;
* Fixed an issue where downloading grouped sequential tasks can lead to app crashes.&lt;br /&gt;
* Fixed an issue where browsing to self linking objects lead to app crashes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.16 on 2023-06-22 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where updates of a content list sometimes leave a meaningless item in that list (strange message at the end of the list).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.15 on 2023-06-21 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where it's impossible to start capturing a photo (or other media types).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.14 on 2023-06-21 {{key press|App Center}} ===&lt;br /&gt;
* The app can now [[Documents_(Client)#PDF_Text_Search|automatically search for predefined texts when opening certain PDF documents]].&lt;br /&gt;
* Increased the maximum zoom factor of the internal PDF viewer from 400% to 2000%.&lt;br /&gt;
* Fixed some issues where the status update results of sequential tasks are incorrect under certain circumstances.&lt;br /&gt;
* Fixed an issue where deleting/changing certain inputs during property editing is no possible.&lt;br /&gt;
* Fixed an issue where persisting property based filters might lead to some unexpected errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.12 on 2023-06-06 {{key press|iOS: App Center}} ===&lt;br /&gt;
* (iOS) Fixed an issue where the selected camera is not applied in camera views.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.9 on 2023-06-05 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where existing hand drawing signatures do not get displayed on devices with certain aspect ratios.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.7 on 2023-06-05 {{key press|App Center}} ===&lt;br /&gt;
* (iOS) The digital hand drawing signature property editing feature is now also supported on iOS.&lt;br /&gt;
* Added the Lazy Loading Query Classification that can prevent unwanted re-evaluation of queries.&lt;br /&gt;
* A [[XAML_Tips#TeachInCommand|TeachInCommand]] is now available in ContentViewModel and PropertyViewModel to set the device's current location as the geo property value.&lt;br /&gt;
* Certain objects can now carry multiple scan codes ([[SYSCLS_OBJECTWITHIDMARKERS|optical]] or [[SYSCLS_OBJECTWITHRFIDTAGS|RFID]]) so that scanning any one of them finds the object.&lt;br /&gt;
* Added settings to allow selecting cameras, resolutions and zoom values (if supported).&lt;br /&gt;
* (iOS) Fixed an issue where the app sometimes crashes after you annotate a PDF document and navigate back.&lt;br /&gt;
* Fixed an issue where your choice of color appears not applied to PDF ink annotations.&lt;br /&gt;
* Fixed an issue where the import of broken profiles was not prevented properly.&lt;br /&gt;
* Fixed an issue where the embedded PDF viewer's horizontal scrollbar does not allow you to view the entire page when pages have different dimensions.&lt;br /&gt;
* (UWP) Fixed an issue where digital signatures can only be drawn using a mouse, but not with a finger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
* Sometimes, objects shift their positions in the lists after being edited. We found out that this is related to the 3rd party list control we use and are considering replacing it. However, this will take some more time in order to make all features we build around the control still function.&lt;br /&gt;
* Currently, the Samsung keyboard doesn't show {{key press|,}} at all, regardless of the current language/locale setting of the device. Please use a different virtual keyboard (e.g. Gboard from Google) instead if {{key press|.}} is unacceptable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
&lt;br /&gt;
=== ⚠️ IsStickyFooter Issue ===&lt;br /&gt;
* When using a DataTrigger to set the properties of a footer for a ListView, the sequence of the properties inside the DataTrigger might matter in some cases. It seems to occur since Version 4.4 due to a Syncfusion update and could lead to the page not being rendered properly and appearing empty. If you encounter such an issue please workaround by adding the IsStickyFooter Property Setter on top inside the DataTrigger. For details, please [[Xamarin_XAML#DataTrigger_to_set_Footer_Properties_in_a_ListView|read this]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.4 Xamarin]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.4_(WinX)&amp;diff=25035</id>
		<title>Version 4.4 (WinX)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.4_(WinX)&amp;diff=25035"/>
				<updated>2023-08-03T10:21:42Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* 4.4.? on 2023-07-? {{key press|App Center}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|This version requires [https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1809_(October_2018_Update) Windows 10 build 17763] or higher}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Store}}: Publicly available in Microsoft Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Store Beta}}: Publicly available in Microsoft Store as beta versions to those whose account email is included in our beta program. Please contact the Augmensys staff and submit your chosen email address if you would like to join.&lt;br /&gt;
&lt;br /&gt;
{{key press|App Center}}: Available to those who have access to the Augmensys App Center.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with ⚠️}}&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
===4.4.? on 2023-07-? {{key press|App Center}}===&lt;br /&gt;
* Fixed an issue where profiles could not be loaded when the name of the profile was too long.&lt;br /&gt;
* Fixed an issue where after editing authentication properties an unwanted backward navigation occurred.&lt;br /&gt;
* Fixed an issue where some download indicators were missing on document tiles.&lt;br /&gt;
* Fixed some UI issues when trying to edit GeoData or DateTime Properties.&lt;br /&gt;
* Fixed an issue where the NavigationView sidebar navigational buttons were clipped on the right edge, and updated its core styles and application in main content areas.&lt;br /&gt;
* Fixed an issue where too many root object overlapped the navigational buttons on the sidebar.&lt;br /&gt;
* Fixed an issue where only up to 9 root items could be displayed on the root area.&lt;br /&gt;
* Fixed a distance calculation error when opening the POI page without a current location.&lt;br /&gt;
* Fixed an issue where a Guid link property value appears empty after you close the Guid editor.&lt;br /&gt;
* Fixed an issue where the entered property value does not appear to be set if you open the editor while being in a direct edit session at the same time.&lt;br /&gt;
* Fixed an issue where saving signatures on unusual display sizes would not be possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.4 (WinX)]]&lt;br /&gt;
&lt;br /&gt;
=== 4.4.10 on 2023-07-19 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where the wrong page might be displayed when you navigate to a PDF hotspot.&lt;br /&gt;
* Fixed an issue where the PDF hotspot is not highlighted when you navigate to it.&lt;br /&gt;
* Fixed an issue where predefined search texts are not automatically highlighted for certain complex PDF documents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.9 on 2023-07-18 {{key press|App Center}} ===&lt;br /&gt;
* The undo and redo operations in the builtin PDF viewer can be [[XAML#UBIKPdfViewer|enabled/disabled]].&lt;br /&gt;
* Fixed an issue where the parent work package of grouped tasks might display a progress over 100%.&lt;br /&gt;
* Fixed an issue where work packages can not be confirmed because the calculated progress is only close to 100% due to the lost of precision.&lt;br /&gt;
* Fixed an issue where the client incorrectly updates/saves hotspots on PDF documents (e.g. even when you simply browse to a PDF document).&lt;br /&gt;
* Fixed an issue where property based content filtering would not apply after pressing the apply filter button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.8 on 2023-07-07 {{key press|App Center}} ===&lt;br /&gt;
* Replaced WebView with [https://learn.microsoft.com/en-us/microsoft-edge/webview2/get-started/winui2#step-6---instantiate-the-webview2-control-in-xaml-code WebView2] for URL documents in the standard UI.&lt;br /&gt;
* Fixed an issue where the default tab is not always automatically applied in a content page.&lt;br /&gt;
* Fixed an issue where the default tab is unnecessarily applied in a content page when the context object is committed.&lt;br /&gt;
* Fixed an issue where the app freezes upon logging out of certain services.&lt;br /&gt;
* Fixed an issue where downloading grouped sequential tasks can lead to app crashes.&lt;br /&gt;
* Fixed an issue where the UBIKContentArea/UBIKChildArea template can be incorrectly used to display child items.&lt;br /&gt;
* Fixed an issue where browsing to self linking objects lead to app crashes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.4 on 2023-06-21 {{key press|App Center}} ===&lt;br /&gt;
* Added the Lazy Loading Query Classification that can prevent unwanted re-evaluation of queries.&lt;br /&gt;
* A [[XAML_Tips#TeachInCommand|TeachInCommand]] is now available in ContentViewModel and PropertyViewModel to set the device's current location as the geo property value.&lt;br /&gt;
* Certain objects can now carry multiple scan codes ([[SYSCLS_OBJECTWITHIDMARKERS|optical]] or [[SYSCLS_OBJECTWITHRFIDTAGS|RFID]]) so that scanning any one of them finds the object.&lt;br /&gt;
* The app can now [[Documents_(Client)#PDF_Text_Search|automatically search for predefined texts when opening certain PDF documents]].&lt;br /&gt;
* Fixed an issue where selected items get deselected after being mass edited in auto sync mode.&lt;br /&gt;
* Fixed an issue where the embedded PDF viewer's horizontal scrollbar does not allow you to view the entire page when pages have different dimensions.&lt;br /&gt;
* Fixed an issue where certain direct editing UI (RatingControl) doesn't work and the input value can never be saved. See [[Property_Direct_Edit_(Client)#ValueItem.PropertyValue_or_ValueItem.PropertyValueSessionless|property direct edit]] for more details.&lt;br /&gt;
* Fixed some issues where the status update results of sequential tasks are incorrect under certain circumstances.&lt;br /&gt;
* Fixed an issue where deleting/changing certain inputs during property editing is no possible.&lt;br /&gt;
* Fixed an issue where persisting property based filters might lead to some unexpected errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* During PDF annotating/hotspotting, changes are lost if you leave the page without deselecting the changed annotation/hotspot.&lt;br /&gt;
* Free Text Annotations that where created in former sessions cannot be selected and therefore cannot be edited any more.&lt;br /&gt;
* Selective list values are sometimes lost during editing on Windows 11 devices.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes  =&lt;br /&gt;
&lt;br /&gt;
* ⚠️NavigationView: Due to a XAML Toolkit upgrade, the items at the bottom of the global sidebar appear clipped. At the same time, the NavigationView styling was streamlined in both UBIKThemes, and the content areas (UBIKContentArea, UBIKRootArea, UBIKDocumentArea, UBIKQueryArea). Already-existing customized versions of these pages will need to be adapted to see these changes. In rare cases, the Navigation View in already existing customized templates will appear broken (white background, reduced functionality) and require conversion.&lt;br /&gt;
{{Expander|indent=22px|heading=Steps to Conversion|content=&lt;br /&gt;
*&amp;lt;b&amp;gt;Step 1:&amp;lt;/b&amp;gt; For each custom; UBIKContentArea, UBIKRootArea, UBIKDocumentArea, UBIKQueryArea:&lt;br /&gt;
** Remove the &amp;lt;muxc:NavigationView ...&amp;gt; and inline notes.&lt;br /&gt;
** Replace it with the ContentControl that references the new UBIKNavigationView as it's template found in any of the default area templates named above), and optionally the xaml notes, documented below.&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&amp;lt;!-- &lt;br /&gt;
 	From 4.4 The NavigationView has been restructured to require less xaml customizing.&lt;br /&gt;
 	A single template (UBIKNavigationView) is now defined in UBIKThemes, and referenced via ContentControl in UBIKRootArea, UBIKContentArea, UBIKQueryArea, UBIKDocumentArea.&lt;br /&gt;
 	The page content is now simply inserted as a child of the ContentControl.&lt;br /&gt;
 --&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;ContentControl Template=&amp;quot;{StaticResource UBIKNavigationView}&amp;quot;&amp;gt;&lt;br /&gt;
Do not forget to also convert the closing tag at the end of the xaml.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Step 2:&amp;lt;/b&amp;gt; Unfortunately, due to the way our themes are loaded, we need to include the new items in our custom UBIKThemes in order for customized color resources, like UBIKAccentColor, to be reflected on the NavigationView (otherwise it will always be standard orange).&lt;br /&gt;
** We also need to remove the old customizing to prevent interference of these styles.&lt;br /&gt;
** Clean up your UBIKThemes by removing all of the standard customizing from before the update. The easiest way is to;&lt;br /&gt;
*** Search in your custom UBIKThemes.xaml for the NavigationView section (you can find it between the tags: &amp;lt;!--#region NAVIGATION VIEW--&amp;gt;) and remove all the contents from this region.&lt;br /&gt;
*** Use Developer Mode to unpack or access the newest standard UBIKThemes, and paste in the two following items in their entirety (make sure you get the entire item, until its closing tag):&lt;br /&gt;
 &amp;lt;Style x:Key=&amp;quot;UBIKPaneToggleButtonStyle&amp;quot;...&amp;gt;&amp;lt;/Style&amp;gt;&lt;br /&gt;
 &amp;lt;ControlTemplate x:Key=&amp;quot;UBIKNavigationView&amp;quot;&amp;gt;...&amp;lt;/ControlTemplate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
* More than 8-10 root items overflowed the navigational sidebar buttons in the updated NavigationView described above. The fix was applied to the UBIKGlobalSideBarButtons template for least chance of conflicting with a customized template. If your project has a customized version of this template and more than 8-10 items, please copy the Height attribute and VisualStateManager from the new default template.&lt;br /&gt;
* Invalid value indicator in [[Property_Direct_Edit_(Client)#ValueItem.PropertyValue_or_ValueItem.PropertyValueSessionless|property direct edit]] moved from UBIKPropertyDirectItemTextBox.xaml and UBIKPropertyDirectItemGeoData.xaml into UBIKPropertyDirectItemContainer.xaml to unify for all properties.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.4 (WinX)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.4_(Xamarin)&amp;diff=25032</id>
		<title>Version 4.4 (Xamarin)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.4_(Xamarin)&amp;diff=25032"/>
				<updated>2023-08-02T11:58:53Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* 4.4.? on 2023-07-? {{key press|App Center}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|UBIK 4 clients can only connect to {{UBIK}} Servers of [[Version 3.6(Server)|version 3.6]] and higher!}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Android: Store}}{{key press|iOS: Store}}: Publicly available in Google Play Store / Apple App Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Beta}}: Publicly available in Google Play Store as beta versions. You can opt in or out of the beta at any time in the store.&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Beta}}: Available through Apple App Store's [https://testflight.apple.com/join/ijGm4j2h invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|UWP: App Center}}{{key press|Android: App Center}}{{key press|iOS: App Center}}: Available to those who have access to the Augmensys App Center.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with a ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
=== 4.4.? on 2023-07-? {{key press|App Center}} ===&lt;br /&gt;
* PDF annotations are now automatically saved when you close the page just like with other regular content.&lt;br /&gt;
* Fixed an issue where work packages can not be confirmed because the calculated progress is only close to 100% due to the lost of precision.&lt;br /&gt;
* Fixed an issue where values do not get saved/committed when clicking on the check button of a task item.&lt;br /&gt;
* Fixed an issue where the client incorrectly updates/saves hotspots on PDF documents (e.g. even when you simply browse to a PDF document).&lt;br /&gt;
* Fixed an issue where PDF annotations and hotspots are incorrectly locked to users who created them but later log in with the same usernames in different cases.&lt;br /&gt;
* Fixed an issue where property based content filtering would not apply after pressing the apply filter button.&lt;br /&gt;
* Fixed an issue where PDF (horizontal) text search highlights are sometimes poorly positioned.&lt;br /&gt;
* Fixed an issue where profiles could not be loaded when the name of the profile was too long.&lt;br /&gt;
* Fixed an issue where after editing authentication properties an unwanted backward navigation occurred.&lt;br /&gt;
* Fixed an issue where you can not open the settings page on the first start of a freshly installed app.&lt;br /&gt;
* Fixed some UI issues when trying to edit GeoData or DateTime Properties.&lt;br /&gt;
* Fixed an issue where a Guid link property value appears empty after you close the Guid editor.&lt;br /&gt;
* Fixed an issue on iOS that limited NFC tag scanning to only be done once per session.&lt;br /&gt;
* Fixed an issue where the tech warning icon was at the false place.&lt;br /&gt;
* Fixed an issues with permissions on Android 13 that caused file import and notifications to not work anymore.&lt;br /&gt;
* Fixed an issue where saving signatures on unusual display sizes would not be possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.4 Xamarin]]&lt;br /&gt;
&lt;br /&gt;
=== 4.4.19 on 2023-07-07 {{key press|iOS: App Center}} ===&lt;br /&gt;
=== 4.4.18 on 2023-07-07 {{key press|Android: App Center}} {{key press|UWP: App Center}} ===&lt;br /&gt;
* Fixed an issue where it's impossible to open settings again after deleting all profiles.&lt;br /&gt;
* (Android) Fixed an issue where the app hangs on first start after installation.&lt;br /&gt;
* Fixed an issue where the app freezes upon logging out of certain services.&lt;br /&gt;
* Fixed an issue where downloading grouped sequential tasks can lead to app crashes.&lt;br /&gt;
* Fixed an issue where browsing to self linking objects lead to app crashes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.16 on 2023-06-22 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where updates of a content list sometimes leave a meaningless item in that list (strange message at the end of the list).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.15 on 2023-06-21 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where it's impossible to start capturing a photo (or other media types).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.14 on 2023-06-21 {{key press|App Center}} ===&lt;br /&gt;
* The app can now [[Documents_(Client)#PDF_Text_Search|automatically search for predefined texts when opening certain PDF documents]].&lt;br /&gt;
* Increased the maximum zoom factor of the internal PDF viewer from 400% to 2000%.&lt;br /&gt;
* Fixed some issues where the status update results of sequential tasks are incorrect under certain circumstances.&lt;br /&gt;
* Fixed an issue where deleting/changing certain inputs during property editing is no possible.&lt;br /&gt;
* Fixed an issue where persisting property based filters might lead to some unexpected errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.12 on 2023-06-06 {{key press|iOS: App Center}} ===&lt;br /&gt;
* (iOS) Fixed an issue where the selected camera is not applied in camera views.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.9 on 2023-06-05 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where existing hand drawing signatures do not get displayed on devices with certain aspect ratios.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.7 on 2023-06-05 {{key press|App Center}} ===&lt;br /&gt;
* (iOS) The digital hand drawing signature property editing feature is now also supported on iOS.&lt;br /&gt;
* Added the Lazy Loading Query Classification that can prevent unwanted re-evaluation of queries.&lt;br /&gt;
* A [[XAML_Tips#TeachInCommand|TeachInCommand]] is now available in ContentViewModel and PropertyViewModel to set the device's current location as the geo property value.&lt;br /&gt;
* Certain objects can now carry multiple scan codes ([[SYSCLS_OBJECTWITHIDMARKERS|optical]] or [[SYSCLS_OBJECTWITHRFIDTAGS|RFID]]) so that scanning any one of them finds the object.&lt;br /&gt;
* Added settings to allow selecting cameras, resolutions and zoom values (if supported).&lt;br /&gt;
* (iOS) Fixed an issue where the app sometimes crashes after you annotate a PDF document and navigate back.&lt;br /&gt;
* Fixed an issue where your choice of color appears not applied to PDF ink annotations.&lt;br /&gt;
* Fixed an issue where the import of broken profiles was not prevented properly.&lt;br /&gt;
* Fixed an issue where the embedded PDF viewer's horizontal scrollbar does not allow you to view the entire page when pages have different dimensions.&lt;br /&gt;
* (UWP) Fixed an issue where digital signatures can only be drawn using a mouse, but not with a finger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
* Sometimes, objects shift their positions in the lists after being edited. We found out that this is related to the 3rd party list control we use and are considering replacing it. However, this will take some more time in order to make all features we build around the control still function.&lt;br /&gt;
* Currently, the Samsung keyboard doesn't show {{key press|,}} at all, regardless of the current language/locale setting of the device. Please use a different virtual keyboard (e.g. Gboard from Google) instead if {{key press|.}} is unacceptable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
&lt;br /&gt;
=== ⚠️ IsStickyFooter Issue ===&lt;br /&gt;
* When using a DataTrigger to set the properties of a footer for a ListView, the sequence of the properties inside the DataTrigger might matter in some cases. It seems to occur since Version 4.4 due to a Syncfusion update and could lead to the page not being rendered properly and appearing empty. If you encounter such an issue please workaround by adding the IsStickyFooter Property Setter on top inside the DataTrigger. For details, please [[Xamarin_XAML#DataTrigger_to_set_Footer_Properties_in_a_ListView|read this]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.4 Xamarin]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.4_(Xamarin)&amp;diff=25027</id>
		<title>Version 4.4 (Xamarin)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.4_(Xamarin)&amp;diff=25027"/>
				<updated>2023-08-01T08:48:34Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* 4.4.? on 2023-07-? {{key press|App Center}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|UBIK 4 clients can only connect to {{UBIK}} Servers of [[Version 3.6(Server)|version 3.6]] and higher!}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Android: Store}}{{key press|iOS: Store}}: Publicly available in Google Play Store / Apple App Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Beta}}: Publicly available in Google Play Store as beta versions. You can opt in or out of the beta at any time in the store.&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Beta}}: Available through Apple App Store's [https://testflight.apple.com/join/ijGm4j2h invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|UWP: App Center}}{{key press|Android: App Center}}{{key press|iOS: App Center}}: Available to those who have access to the Augmensys App Center.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with a ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
=== 4.4.? on 2023-07-? {{key press|App Center}} ===&lt;br /&gt;
* PDF annotations are now automatically saved when you close the page just like with other regular content.&lt;br /&gt;
* Fixed an issue where work packages can not be confirmed because the calculated progress is only close to 100% due to the lost of precision.&lt;br /&gt;
* Fixed an issue where values do not get saved/committed when clicking on the check button of a task item.&lt;br /&gt;
* Fixed an issue where the client incorrectly updates/saves hotspots on PDF documents (e.g. even when you simply browse to a PDF document).&lt;br /&gt;
* Fixed an issue where PDF annotations and hotspots are incorrectly locked to users who created them but later log in with the same usernames in different cases.&lt;br /&gt;
* Fixed an issue where property based content filtering would not apply after pressing the apply filter button.&lt;br /&gt;
* Fixed an issue where PDF (horizontal) text search highlights are sometimes poorly positioned.&lt;br /&gt;
* Fixed an issue where profiles could not be loaded when the name of the profile was too long.&lt;br /&gt;
* Fixed an issue where after editing authentication properties an unwanted backward navigation occurred.&lt;br /&gt;
* Fixed an issue where you can not open the settings page on the first start of a freshly installed app.&lt;br /&gt;
* Fixed some UI issues when trying to edit GeoData or DateTime Properties.&lt;br /&gt;
* Fixed an issue where a Guid link property value appears empty after you close the Guid editor.&lt;br /&gt;
* Fixed an issue on iOS that limited NFC tag scanning to only be done once per session.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.4 Xamarin]]&lt;br /&gt;
&lt;br /&gt;
=== 4.4.19 on 2023-07-07 {{key press|iOS: App Center}} ===&lt;br /&gt;
=== 4.4.18 on 2023-07-07 {{key press|Android: App Center}} {{key press|UWP: App Center}} ===&lt;br /&gt;
* Fixed an issue where it's impossible to open settings again after deleting all profiles.&lt;br /&gt;
* (Android) Fixed an issue where the app hangs on first start after installation.&lt;br /&gt;
* Fixed an issue where the app freezes upon logging out of certain services.&lt;br /&gt;
* Fixed an issue where downloading grouped sequential tasks can lead to app crashes.&lt;br /&gt;
* Fixed an issue where browsing to self linking objects lead to app crashes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.16 on 2023-06-22 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where updates of a content list sometimes leave a meaningless item in that list (strange message at the end of the list).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.15 on 2023-06-21 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where it's impossible to start capturing a photo (or other media types).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.14 on 2023-06-21 {{key press|App Center}} ===&lt;br /&gt;
* The app can now [[Documents_(Client)#PDF_Text_Search|automatically search for predefined texts when opening certain PDF documents]].&lt;br /&gt;
* Increased the maximum zoom factor of the internal PDF viewer from 400% to 2000%.&lt;br /&gt;
* Fixed some issues where the status update results of sequential tasks are incorrect under certain circumstances.&lt;br /&gt;
* Fixed an issue where deleting/changing certain inputs during property editing is no possible.&lt;br /&gt;
* Fixed an issue where persisting property based filters might lead to some unexpected errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.12 on 2023-06-06 {{key press|iOS: App Center}} ===&lt;br /&gt;
* (iOS) Fixed an issue where the selected camera is not applied in camera views.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.9 on 2023-06-05 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where existing hand drawing signatures do not get displayed on devices with certain aspect ratios.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.7 on 2023-06-05 {{key press|App Center}} ===&lt;br /&gt;
* (iOS) The digital hand drawing signature property editing feature is now also supported on iOS.&lt;br /&gt;
* Added the Lazy Loading Query Classification that can prevent unwanted re-evaluation of queries.&lt;br /&gt;
* A [[XAML_Tips#TeachInCommand|TeachInCommand]] is now available in ContentViewModel and PropertyViewModel to set the device's current location as the geo property value.&lt;br /&gt;
* Certain objects can now carry multiple scan codes ([[SYSCLS_OBJECTWITHIDMARKERS|optical]] or [[SYSCLS_OBJECTWITHRFIDTAGS|RFID]]) so that scanning any one of them finds the object.&lt;br /&gt;
* Added settings to allow selecting cameras, resolutions and zoom values (if supported).&lt;br /&gt;
* (iOS) Fixed an issue where the app sometimes crashes after you annotate a PDF document and navigate back.&lt;br /&gt;
* Fixed an issue where your choice of color appears not applied to PDF ink annotations.&lt;br /&gt;
* Fixed an issue where the import of broken profiles was not prevented properly.&lt;br /&gt;
* Fixed an issue where the embedded PDF viewer's horizontal scrollbar does not allow you to view the entire page when pages have different dimensions.&lt;br /&gt;
* (UWP) Fixed an issue where digital signatures can only be drawn using a mouse, but not with a finger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
* Sometimes, objects shift their positions in the lists after being edited. We found out that this is related to the 3rd party list control we use and are considering replacing it. However, this will take some more time in order to make all features we build around the control still function.&lt;br /&gt;
* Currently, the Samsung keyboard doesn't show {{key press|,}} at all, regardless of the current language/locale setting of the device. Please use a different virtual keyboard (e.g. Gboard from Google) instead if {{key press|.}} is unacceptable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
&lt;br /&gt;
=== ⚠️ IsStickyFooter Issue ===&lt;br /&gt;
* When using a DataTrigger to set the properties of a footer for a ListView, the sequence of the properties inside the DataTrigger might matter in some cases. It seems to occur since Version 4.4 due to a Syncfusion update and could lead to the page not being rendered properly and appearing empty. If you encounter such an issue please workaround by adding the IsStickyFooter Property Setter on top inside the DataTrigger. For details, please [[Xamarin_XAML#DataTrigger_to_set_Footer_Properties_in_a_ListView|read this]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.4 Xamarin]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.4_(WinX)&amp;diff=24880</id>
		<title>Version 4.4 (WinX)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.4_(WinX)&amp;diff=24880"/>
				<updated>2023-07-25T13:10:23Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|This version requires [https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1809_(October_2018_Update) Windows 10 build 17763] or higher}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Store}}: Publicly available in Microsoft Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Store Beta}}: Publicly available in Microsoft Store as beta versions to those whose account email is included in our beta program. Please contact the Augmensys staff and submit your chosen email address if you would like to join.&lt;br /&gt;
&lt;br /&gt;
{{key press|App Center}}: Available to those who have access to the Augmensys App Center.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with ⚠️}}&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
===4.4.? on 2023-07-? {{key press|App Center}}===&lt;br /&gt;
* Fixed an issue where profiles could not be loaded when the name of the profile was too long.&lt;br /&gt;
* Fixed an issue where after editing authentication properties an unwanted backward navigation occurred.&lt;br /&gt;
* Fixed an issue where some download indicators were missing on document tiles.&lt;br /&gt;
* Fixed some UI issues when trying to edit GeoData or DateTime Properties.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.10 on 2023-07-19 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where the wrong page might be displayed when you navigate to a PDF hotspot.&lt;br /&gt;
* Fixed an issue where the PDF hotspot is not highlighted when you navigate to it.&lt;br /&gt;
* Fixed an issue where predefined search texts are not automatically highlighted for certain complex PDF documents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.9 on 2023-07-18 {{key press|App Center}} ===&lt;br /&gt;
* The undo and redo operations in the builtin PDF viewer can be [[XAML#UBIKPdfViewer|enabled/disabled]].&lt;br /&gt;
* Fixed an issue where the parent work package of grouped tasks might display a progress over 100%.&lt;br /&gt;
* Fixed an issue where work packages can not be confirmed because the calculated progress is only close to 100% due to the lost of precision.&lt;br /&gt;
* Fixed an issue where the client incorrectly updates/saves hotspots on PDF documents (e.g. even when you simply browse to a PDF document).&lt;br /&gt;
* Fixed an issue where property based content filtering would not apply after pressing the apply filter button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.8 on 2023-07-07 {{key press|App Center}} ===&lt;br /&gt;
* Replaced WebView with [https://learn.microsoft.com/en-us/microsoft-edge/webview2/get-started/winui2#step-6---instantiate-the-webview2-control-in-xaml-code WebView2] for URL documents in the standard UI.&lt;br /&gt;
* Fixed an issue where the default tab is not always automatically applied in a content page.&lt;br /&gt;
* Fixed an issue where the default tab is unnecessarily applied in a content page when the context object is committed.&lt;br /&gt;
* Fixed an issue where the app freezes upon logging out of certain services.&lt;br /&gt;
* Fixed an issue where downloading grouped sequential tasks can lead to app crashes.&lt;br /&gt;
* Fixed an issue where the UBIKContentArea/UBIKChildArea template can be incorrectly used to display child items.&lt;br /&gt;
* Fixed an issue where browsing to self linking objects lead to app crashes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.4 on 2023-06-21 {{key press|App Center}} ===&lt;br /&gt;
* Added the Lazy Loading Query Classification that can prevent unwanted re-evaluation of queries.&lt;br /&gt;
* A [[XAML_Tips#TeachInCommand|TeachInCommand]] is now available in ContentViewModel and PropertyViewModel to set the device's current location as the geo property value.&lt;br /&gt;
* Certain objects can now carry multiple scan codes ([[SYSCLS_OBJECTWITHIDMARKERS|optical]] or [[SYSCLS_OBJECTWITHRFIDTAGS|RFID]]) so that scanning any one of them finds the object.&lt;br /&gt;
* The app can now [[Documents_(Client)#PDF_Text_Search|automatically search for predefined texts when opening certain PDF documents]].&lt;br /&gt;
* Fixed an issue where selected items get deselected after being mass edited in auto sync mode.&lt;br /&gt;
* Fixed an issue where the embedded PDF viewer's horizontal scrollbar does not allow you to view the entire page when pages have different dimensions.&lt;br /&gt;
* Fixed an issue where certain direct editing UI (RatingControl) doesn't work and the input value can never be saved. See [[Property_Direct_Edit_(Client)#ValueItem.PropertyValue_or_ValueItem.PropertyValueSessionless|property direct edit]] for more details.&lt;br /&gt;
* Fixed some issues where the status update results of sequential tasks are incorrect under certain circumstances.&lt;br /&gt;
* Fixed an issue where deleting/changing certain inputs during property editing is no possible.&lt;br /&gt;
* Fixed an issue where persisting property based filters might lead to some unexpected errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* During PDF annotating/hotspotting, changes are lost if you leave the page without deselecting the changed annotation/hotspot.&lt;br /&gt;
* Free Text Annotations that where created in former sessions cannot be selected and therefore cannot be edited any more.&lt;br /&gt;
* Selective list values are sometimes lost during editing on Windows 11 devices.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes  =&lt;br /&gt;
===⚠️NavigationView ===&lt;br /&gt;
* Due to a XAML Toolkit upgrade, the items at the bottom of the global sidebar appear clipped. At the same time, the NavigationView styling was streamlined in both UBIKThemes, and the content areas (UBIKContentArea, UBIKRootArea, UBIKDocumentArea, UBIKQueryArea). Already-existing customized versions of these pages will need to be adapted to see these changes. In rare cases, the Navigation View in already existing customized templates will appear broken (white background, reduced functionality) and require conversion. For guidance, please consult [https://xp-dev.com/trac/UBIK.Server/ticket/7643#StepstoConversion| Steps to Conversion].&lt;br /&gt;
* Invalid value indicator in [[Property_Direct_Edit_(Client)#ValueItem.PropertyValue_or_ValueItem.PropertyValueSessionless|property direct edit]] moved from UBIKPropertyDirectItemTextBox.xaml and UBIKPropertyDirectItemGeoData.xaml into UBIKPropertyDirectItemContainer.xaml to unify for all properties.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.4 (WinX)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.4_(WinX)&amp;diff=24857</id>
		<title>Version 4.4 (WinX)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.4_(WinX)&amp;diff=24857"/>
				<updated>2023-07-24T10:55:43Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* 4.4.? on 2023-07-? {{key press|App Center}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|This version requires [https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1809_(October_2018_Update) Windows 10 build 17763] or higher}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Store}}: Publicly available in Microsoft Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Store Beta}}: Publicly available in Microsoft Store as beta versions to those whose account email is included in our beta program. Please contact the Augmensys staff and submit your chosen email address if you would like to join.&lt;br /&gt;
&lt;br /&gt;
{{key press|App Center}}: Available to those who have access to the Augmensys App Center.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with ⚠️}}&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
===4.4.? on 2023-07-? {{key press|App Center}}===&lt;br /&gt;
* Fixed an issue where profiles could not be loaded when the name of the profile was too long.&lt;br /&gt;
* Fixed an issue where after editing authentication properties an unwanted backward navigation occurred.&lt;br /&gt;
* Fixed an issue where some download indicators were missing on document tiles.&lt;br /&gt;
* Fixed some UI issues when trying to edit GeoData or DateTime Properties.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.4 (WinX)]]&lt;br /&gt;
&lt;br /&gt;
=== 4.4.10 on 2023-07-19 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where the wrong page might be displayed when you navigate to a PDF hotspot.&lt;br /&gt;
* Fixed an issue where the PDF hotspot is not highlighted when you navigate to it.&lt;br /&gt;
* Fixed an issue where predefined search texts are not automatically highlighted for certain complex PDF documents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.9 on 2023-07-18 {{key press|App Center}} ===&lt;br /&gt;
* The undo and redo operations in the builtin PDF viewer can be [[XAML#UBIKPdfViewer|enabled/disabled]].&lt;br /&gt;
* Fixed an issue where the parent work package of grouped tasks might display a progress over 100%.&lt;br /&gt;
* Fixed an issue where work packages can not be confirmed because the calculated progress is only close to 100% due to the lost of precision.&lt;br /&gt;
* Fixed an issue where the client incorrectly updates/saves hotspots on PDF documents (e.g. even when you simply browse to a PDF document).&lt;br /&gt;
* Fixed an issue where property based content filtering would not apply after pressing the apply filter button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.8 on 2023-07-07 {{key press|App Center}} ===&lt;br /&gt;
* Replaced WebView with [https://learn.microsoft.com/en-us/microsoft-edge/webview2/get-started/winui2#step-6---instantiate-the-webview2-control-in-xaml-code WebView2] for URL documents in the standard UI.&lt;br /&gt;
* Fixed an issue where the default tab is not always automatically applied in a content page.&lt;br /&gt;
* Fixed an issue where the default tab is unnecessarily applied in a content page when the context object is committed.&lt;br /&gt;
* Fixed an issue where the app freezes upon logging out of certain services.&lt;br /&gt;
* Fixed an issue where downloading grouped sequential tasks can lead to app crashes.&lt;br /&gt;
* Fixed an issue where the UBIKContentArea/UBIKChildArea template can be incorrectly used to display child items.&lt;br /&gt;
* Fixed an issue where browsing to self linking objects lead to app crashes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.4 on 2023-06-21 {{key press|App Center}} ===&lt;br /&gt;
* Added the Lazy Loading Query Classification that can prevent unwanted re-evaluation of queries.&lt;br /&gt;
* A [[XAML_Tips#TeachInCommand|TeachInCommand]] is now available in ContentViewModel and PropertyViewModel to set the device's current location as the geo property value.&lt;br /&gt;
* Certain objects can now carry multiple scan codes ([[SYSCLS_OBJECTWITHIDMARKERS|optical]] or [[SYSCLS_OBJECTWITHRFIDTAGS|RFID]]) so that scanning any one of them finds the object.&lt;br /&gt;
* The app can now [[Documents_(Client)#PDF_Text_Search|automatically search for predefined texts when opening certain PDF documents]].&lt;br /&gt;
* Fixed an issue where selected items get deselected after being mass edited in auto sync mode.&lt;br /&gt;
* Fixed an issue where the embedded PDF viewer's horizontal scrollbar does not allow you to view the entire page when pages have different dimensions.&lt;br /&gt;
* Fixed an issue where certain direct editing UI (RatingControl) doesn't work and the input value can never be saved. See [[Property_Direct_Edit_(Client)#ValueItem.PropertyValue_or_ValueItem.PropertyValueSessionless|property direct edit]] for more details.&lt;br /&gt;
* Fixed some issues where the status update results of sequential tasks are incorrect under certain circumstances.&lt;br /&gt;
* Fixed an issue where deleting/changing certain inputs during property editing is no possible.&lt;br /&gt;
* Fixed an issue where persisting property based filters might lead to some unexpected errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* During PDF annotating/hotspotting, changes are lost if you leave the page without deselecting the changed annotation/hotspot.&lt;br /&gt;
* Free Text Annotations that where created in former sessions cannot be selected and therefore cannot be edited any more.&lt;br /&gt;
* Selective list values are sometimes lost during editing on Windows 11 devices.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes  =&lt;br /&gt;
===⚠️NavigationView ===&lt;br /&gt;
* Due to a XAML Toolkit upgrade, the items at the bottom of the global sidebar appear clipped. At the same time, the NavigationView styling was streamlined in both UBIKThemes, and the content areas (UBIKContentArea, UBIKRootArea, UBIKDocumentArea, UBIKQueryArea). Already-existing customized versions of these pages will need to be adapted to see these changes. In rare cases, the Navigation View in already existing customized templates will appear broken (white background, reduced functionality) and require conversion. For guidance, please consult [https://xp-dev.com/trac/UBIK.Server/ticket/7643#StepstoConversion| Steps to Conversion].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.4 (WinX)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.4_(Xamarin)&amp;diff=24856</id>
		<title>Version 4.4 (Xamarin)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.4_(Xamarin)&amp;diff=24856"/>
				<updated>2023-07-24T10:55:23Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* 4.4.? on 2023-07-? {{key press|App Center}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|UBIK 4 clients can only connect to {{UBIK}} Servers of [[Version 3.6(Server)|version 3.6]] and higher!}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Android: Store}}{{key press|iOS: Store}}: Publicly available in Google Play Store / Apple App Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Beta}}: Publicly available in Google Play Store as beta versions. You can opt in or out of the beta at any time in the store.&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Beta}}: Available through Apple App Store's [https://testflight.apple.com/join/ijGm4j2h invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|UWP: App Center}}{{key press|Android: App Center}}{{key press|iOS: App Center}}: Available to those who have access to the Augmensys App Center.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with a ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
=== 4.4.? on 2023-07-? {{key press|App Center}} ===&lt;br /&gt;
* PDF annotations are now automatically saved when you close the page just like with other regular content.&lt;br /&gt;
* Fixed an issue where work packages can not be confirmed because the calculated progress is only close to 100% due to the lost of precision.&lt;br /&gt;
* Fixed an issue where values do not get saved/committed when clicking on the check button of a task item.&lt;br /&gt;
* Fixed an issue where the client incorrectly updates/saves hotspots on PDF documents (e.g. even when you simply browse to a PDF document).&lt;br /&gt;
* Fixed an issue where PDF annotations and hotspots are incorrectly locked to users who created them but later log in with the same usernames in different cases.&lt;br /&gt;
* Fixed an issue where property based content filtering would not apply after pressing the apply filter button.&lt;br /&gt;
* Fixed an issue where PDF (horizontal) text search highlights are sometimes poorly positioned.&lt;br /&gt;
* Fixed an issue where profiles could not be loaded when the name of the profile was too long.&lt;br /&gt;
* Fixed an issue where after editing authentication properties an unwanted backward navigation occurred.&lt;br /&gt;
* Fixed an issue where you can not open the settings page on the first start of a freshly installed app.&lt;br /&gt;
* Fixed some UI issues when trying to edit GeoData or DateTime Properties.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.4 Xamarin]]&lt;br /&gt;
&lt;br /&gt;
=== 4.4.19 on 2023-07-07 {{key press|iOS: App Center}} ===&lt;br /&gt;
=== 4.4.18 on 2023-07-07 {{key press|Android: App Center}} {{key press|UWP: App Center}} ===&lt;br /&gt;
* Fixed an issue where it's impossible to open settings again after deleting all profiles.&lt;br /&gt;
* (Android) Fixed an issue where the app hangs on first start after installation.&lt;br /&gt;
* Fixed an issue where the app freezes upon logging out of certain services.&lt;br /&gt;
* Fixed an issue where downloading grouped sequential tasks can lead to app crashes.&lt;br /&gt;
* Fixed an issue where browsing to self linking objects lead to app crashes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.16 on 2023-06-22 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where updates of a content list sometimes leave a meaningless item in that list (strange message at the end of the list).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.15 on 2023-06-21 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where it's impossible to start capturing a photo (or other media types).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.14 on 2023-06-21 {{key press|App Center}} ===&lt;br /&gt;
* The app can now [[Documents_(Client)#PDF_Text_Search|automatically search for predefined texts when opening certain PDF documents]].&lt;br /&gt;
* Increased the maximum zoom factor of the internal PDF viewer from 400% to 2000%.&lt;br /&gt;
* Fixed some issues where the status update results of sequential tasks are incorrect under certain circumstances.&lt;br /&gt;
* Fixed an issue where deleting/changing certain inputs during property editing is no possible.&lt;br /&gt;
* Fixed an issue where persisting property based filters might lead to some unexpected errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.12 on 2023-06-06 {{key press|iOS: App Center}} ===&lt;br /&gt;
* (iOS) Fixed an issue where the selected camera is not applied in camera views.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.9 on 2023-06-05 {{key press|App Center}} ===&lt;br /&gt;
* Fixed an issue where existing hand drawing signatures do not get displayed on devices with certain aspect ratios.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4.4.7 on 2023-06-05 {{key press|App Center}} ===&lt;br /&gt;
* (iOS) The digital hand drawing signature property editing feature is now also supported on iOS.&lt;br /&gt;
* Added the Lazy Loading Query Classification that can prevent unwanted re-evaluation of queries.&lt;br /&gt;
* A [[XAML_Tips#TeachInCommand|TeachInCommand]] is now available in ContentViewModel and PropertyViewModel to set the device's current location as the geo property value.&lt;br /&gt;
* Certain objects can now carry multiple scan codes ([[SYSCLS_OBJECTWITHIDMARKERS|optical]] or [[SYSCLS_OBJECTWITHRFIDTAGS|RFID]]) so that scanning any one of them finds the object.&lt;br /&gt;
* Added settings to allow selecting cameras, resolutions and zoom values (if supported).&lt;br /&gt;
* (iOS) Fixed an issue where the app sometimes crashes after you annotate a PDF document and navigate back.&lt;br /&gt;
* Fixed an issue where your choice of color appears not applied to PDF ink annotations.&lt;br /&gt;
* Fixed an issue where the import of broken profiles was not prevented properly.&lt;br /&gt;
* Fixed an issue where the embedded PDF viewer's horizontal scrollbar does not allow you to view the entire page when pages have different dimensions.&lt;br /&gt;
* (UWP) Fixed an issue where digital signatures can only be drawn using a mouse, but not with a finger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
* Sometimes, objects shift their positions in the lists after being edited. We found out that this is related to the 3rd party list control we use and are considering replacing it. However, this will take some more time in order to make all features we build around the control still function.&lt;br /&gt;
* Currently, the Samsung keyboard doesn't show {{key press|,}} at all, regardless of the current language/locale setting of the device. Please use a different virtual keyboard (e.g. Gboard from Google) instead if {{key press|.}} is unacceptable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
&lt;br /&gt;
=== ⚠️ IsStickyFooter Issue ===&lt;br /&gt;
* When using a DataTrigger to set the properties of a footer for a ListView, the sequence of the properties inside the DataTrigger might matter in some cases. It seems to occur since Version 4.4 due to a Syncfusion update and could lead to the page not being rendered properly and appearing empty. If you encounter such an issue please workaround by adding the IsStickyFooter Property Setter on top inside the DataTrigger. For details, please [[Xamarin_XAML#DataTrigger_to_set_Footer_Properties_in_a_ListView|read this]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Version 4.4|Version 4.4 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.4 Xamarin]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Push_Service_(Client)&amp;diff=23878</id>
		<title>Push Service (Client)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Push_Service_(Client)&amp;diff=23878"/>
				<updated>2022-09-30T09:07:33Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* Background polling service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The {{UBIK}} push service is a mechanism to ensure the clients always receive certain information pushed by the [[UBIK Push Web Service|push web service]].&lt;br /&gt;
&lt;br /&gt;
The client part of the push service runs in the background, independently of the content service. When active, it periodically polls the push web service for new updates. Once such updates are received, the clients react accordingly based on the information contained in them. Some examples are updating content and switching clients into different [[Sync Mode|sync modes]].&lt;br /&gt;
&lt;br /&gt;
== Push service settings ==&lt;br /&gt;
The following settings are used in order for the push service to function properly.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;50%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name!! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| ''PushServerName''|| Name of the server to connect to for push updates&lt;br /&gt;
|-&lt;br /&gt;
| ''PushPortNumber''|| Port number to use when connecting to the push server (optional)&lt;br /&gt;
|-&lt;br /&gt;
| ''UBIKPushService''|| Name of the UBIK push service&lt;br /&gt;
|-&lt;br /&gt;
| ''ActivatePushService''|| Whether {{UBIK}} should run with/without the push service. {{Version/AndroidSince|2.4.1}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Hint|Changing the value of '''ActivatePushService''' could potentially [[HowTo:Start/Stop_Push_Service_(UBIK_Android)|start/stop the push service]].}}&lt;br /&gt;
&lt;br /&gt;
== Background polling service ==&lt;br /&gt;
As mentioned, a background polling service is responsible for communicating with the push web service and getting push updates.&lt;br /&gt;
This service is started once users successfully log in and will keep running until they are logged out.&lt;br /&gt;
&lt;br /&gt;
{{Hint|On Android and iOS the Polling will continue while UBIK is in the background and/or the device is asleep, but at a deduced frequency. On Android it is around 15 minutes. On iOS it depends on how much the App is used, the frequency can range from 15 minutes to a couple of hours. {{Version/XamarinSince|4.2}} }}&lt;br /&gt;
&lt;br /&gt;
There are two types of push communication involved here, namely&lt;br /&gt;
* Updating push parameters;&lt;br /&gt;
* Updating push data&lt;br /&gt;
&lt;br /&gt;
=== Updating push parameters ===&lt;br /&gt;
There are different [[UBIK Push Web Service#Push Criteria|push criteria]] that define which data should be pushed to which clients.&lt;br /&gt;
As a result, the push web service requires a set of push parameters which can be used to check against these criteria.&lt;br /&gt;
&lt;br /&gt;
The client polling service, in order to always get the intended push data, has to keep this set of parameters up-to-date and use them in the push data updating.&lt;br /&gt;
&lt;br /&gt;
During maintaining the push parameters, the following information might be collected by {{UBIK}} and used as the parameter values:&lt;br /&gt;
* User name;&lt;br /&gt;
* Device ID;&lt;br /&gt;
* {{UBIK}} application name and context name;&lt;br /&gt;
* Current location;&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
=== Updating push data ===&lt;br /&gt;
The main job of the service is to get push data once it's ready to be pushed from the server. And the service is not interested in getting push data it has received before.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the service repeats (e.g. every 10 seconds) the following tasks:&lt;br /&gt;
# Frequently sending the client's actively maintained push parameters (types and values) and the last push status ID to the push web service;&lt;br /&gt;
# Recording the status ID in the received push update as the last push status ID;&lt;br /&gt;
# Passing on the data in the received push update so that {{UBIK}} can process it.&lt;br /&gt;
&lt;br /&gt;
[[Category:2.4.0|Push Service (Client)]]&lt;br /&gt;
[[Category:Android|Push Service (Client)]]&lt;br /&gt;
[[Category:Push|Push Service (Client)]]&lt;br /&gt;
[[Category:WinX|Push Service (Client)]]&lt;br /&gt;
&lt;br /&gt;
== Processing push data ==&lt;br /&gt;
[[File:UI_Android_Push_Data_Received_Notification.jpg|thumb|alt=Notification for Received Push Data|Notification for Received Push Data]]&lt;br /&gt;
&lt;br /&gt;
After receiving push data, {{UBIK}} processes it and potentially performs different follow-up tasks.&lt;br /&gt;
&lt;br /&gt;
The currently known types of push data and their intended client actions are described in the following subsections.&lt;br /&gt;
&lt;br /&gt;
=== Updating content hierarchy ===&lt;br /&gt;
Upon receiving such push data, {{UBIK}} tries to update the content hierarchy as the parameters in the push data indicate. This can lead to various scenarios such as:&lt;br /&gt;
* Update of a single object;&lt;br /&gt;
* Removal of a single object;&lt;br /&gt;
* Update of a single object and all its children;&lt;br /&gt;
* Update of root objects;&lt;br /&gt;
* Update of infrastructures;&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
In case there are uncommitted changes involved in the update, {{UBIK}} performs the update while preserving the changes. This applies for all the sync modes.&lt;br /&gt;
&lt;br /&gt;
=== Updating Meta Definitions ===&lt;br /&gt;
[[File:UI_Android_Push_Update_MetaDef_Uncommitted_Conflict.jpg|thumb|alt=Error Notification for Conflict during Updating Meta Definitions|Error Notification for Conflict during Updating Meta Definitions]]&lt;br /&gt;
&lt;br /&gt;
Upon receiving such push data, {{UBIK}} tries to update all the Meta Definitions. If the update is successful, root objects and infrastructures are then updated as well, and {{UBIK}} is automatically switched to the automatic sync mode.&lt;br /&gt;
&lt;br /&gt;
In case there are uncommitted changes, the followings apply depending on the sync mode at that point of time.&lt;br /&gt;
* Automatic mode: Changes are committed automatically and the updates are done afterwards;&lt;br /&gt;
* Other modes: Updates can not proceed (changes will be lost otherwise) and an error notification is shown.&lt;br /&gt;
&lt;br /&gt;
Meta definition pushes are not yet supported by the WinX client.&lt;br /&gt;
&lt;br /&gt;
=== Updating device status ===&lt;br /&gt;
[[File:UI_Android_Push_Maintenance_Uncommitted_Conflict.jpg|thumb|alt=Error Dialog for Conflict during Preparing for Maintenance|Error Dialog for Conflict during Preparing for Maintenance]]&lt;br /&gt;
&lt;br /&gt;
Upon receiving such push data, {{UBIK}} tries to update the status of the device. Currently, the only known status is maintenance. This means the server will be under maintenance and unreachable soon. Therefore, {{UBIK}} should be switched to offline mode.&lt;br /&gt;
&lt;br /&gt;
In case there are uncommitted changes, the followings apply depending on the sync mode at that point of time.&lt;br /&gt;
* Automatic mode: Changes are committed automatically and {{UBIK}} is switched to offline mode;&lt;br /&gt;
* Other modes: A dialog is shown to let the users decide whether to commit their changes or not. Changes are, of course, only committed with users' consent. But {{UBIK}} is switched to offline mode either way.&lt;br /&gt;
&lt;br /&gt;
Device status pushes are not yet supported by the WinX client.&lt;br /&gt;
&lt;br /&gt;
=== Popup dialogs ===&lt;br /&gt;
There are three sub types of this push: {{Version/AndroidSince|2.4.5}}&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;200&amp;quot; heights=&amp;quot;200&amp;quot;&amp;gt;&lt;br /&gt;
File:UI_Android_Push_Popup_Emergency.jpg|Emergency popup&lt;br /&gt;
File:UI_Android_Push_Popup_Failure.jpg|Failure popup&lt;br /&gt;
File:UI_Android_Push_Popup_Important_Info.jpg|Important information popup&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Upon receiving such a push, a dialog with the corresponding style is shown to the user. All these popups can also contain a content/document. In either case, the associated object will be downloaded as soon as the push is received and the button text will be updated accordingly. The possible button states are:&lt;br /&gt;
* {{key press|OK}}: If the popup contains only text;&lt;br /&gt;
* {{key press|Waiting}}/{{key press|Downloading}}/{{key press|Detail}}: If there is an object associated and the download is pending/on-going/successful;&lt;br /&gt;
* {{key press|Close}}: If the associated object somehow cannot be downloaded. The detailed error(s) is/are displayed as notification(s) in this case.&lt;br /&gt;
Once the user has confirmed the popup by clicking the {{key press|OK}}/{{key press|Detail}} button, it is considered successful and won’t be received again. In the case of a {{key press|Detail}} button, the associated object is opened in either the {{UBIK}} [[UBIK_Client_Basics#Content_Browser|content browser]] or a third party document viewer.&lt;br /&gt;
{{Hint|Users can only dismiss the dialog by clicking the {{key press|OK}}/{{key press|Detail}}/{{key press|Close}} button. The Android back button is disabled when such a popup dialog is shown.}}&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
Popup dialog pushes are not yet supported by the WinX client.&lt;br /&gt;
&lt;br /&gt;
=== Reacting to processing errors ===&lt;br /&gt;
In the push scenarios described above, once a conflict is detected and can not be resolved (e.g. updating Meta Definitions when there are uncommitted changes in manual sync mode), that particular push is considered as failed to be processed.&lt;br /&gt;
&lt;br /&gt;
During the next push update, all the failed pushes will be reported to the push web service. The result of this is {{UBIK}} will get these failed pushes again along with the new pushes (if there are any). However, all successful pushes in the previous push update will not be delivered again.&lt;br /&gt;
&lt;br /&gt;
== Push related errors ==&lt;br /&gt;
Just like for the content service, various errors can happen when the push service is running. For example,&lt;br /&gt;
* The push web service is unreachable due to misconfigurations in the settings;&lt;br /&gt;
* Users are denied of accessing the push web service due to invalid credentials;&lt;br /&gt;
* The client push service is incompatible with the push web service due to version differences;&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
In case such an error occurs, a notification is shown to inform the users so that they can either fix the issue or contact the administrators.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[UBIK Push Web Service]]&lt;br /&gt;
* [[Sync Mode]]&lt;br /&gt;
* [[Activity:PushPopUpMessage_(Activity)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Category/Version|2.4.0}}&lt;br /&gt;
&lt;br /&gt;
[[Category:2.4.0|Push Service (Client)]]&lt;br /&gt;
[[Category:Android|Push Service (Client)]]&lt;br /&gt;
[[Category:Push|Push Service (Client)]]&lt;br /&gt;
[[Category:WinX|Push Service (Client)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=UBIK_WinX_Client_Basics&amp;diff=23616</id>
		<title>UBIK WinX Client Basics</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=UBIK_WinX_Client_Basics&amp;diff=23616"/>
				<updated>2022-04-21T14:53:17Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UBIK}} Client is the mobile application for viewing and modifying data, showing documents, starting navigation, visualizing POIs and much more.&lt;br /&gt;
&lt;br /&gt;
Client applications are available for Android and WinX, however the features available on each of the platform dependent applications might differ. An overview of the available features can be found in the [[Client_Feature_Table|feature comparison table]].&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
Users need to login in order to access confidential data, this can be done in the [[Login View]].&lt;br /&gt;
&lt;br /&gt;
=== Confirm login === &lt;br /&gt;
{{Version/WinXSince|3.6}}&lt;br /&gt;
Certain pages might require to confirm the login data, even if the user is already logged in. This can be done in the following way: The CheckUserOfflineCommand needs to be called with the username and password as parameter, if the login was valid, the CheckUserOfflineSuccess boolean property is set to true, which causes the text &amp;quot;Login confirmed&amp;quot; to appear in the example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TextBox&lt;br /&gt;
	x:Name=&amp;quot;Sign01User&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&lt;br /&gt;
	PlaceholderText=&amp;quot;User&amp;quot;&lt;br /&gt;
	Text=&amp;quot;{Binding UserName}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;PasswordBox&lt;br /&gt;
	x:Name=&amp;quot;Sign01PW&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&lt;br /&gt;
	PlaceholderText=&amp;quot;Password&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;Button&lt;br /&gt;
	Command=&amp;quot;{Binding CheckUserOfflineCommand}&amp;quot;&lt;br /&gt;
	Content=&amp;quot;Confirm login&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
		&amp;lt;uc:KeyValueList&amp;gt;&lt;br /&gt;
			&amp;lt;uc:KeyValueParameter Key=&amp;quot;UserName&amp;quot; Value=&amp;quot;{Binding ElementName=Sign01User, Path=Text}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;uc:KeyValueParameter Key=&amp;quot;Password&amp;quot; Value=&amp;quot;{Binding ElementName=Sign01PW, Path=Password}&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/uc:KeyValueList&amp;gt;&lt;br /&gt;
	&amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;TextBlock Text=&amp;quot;Login confirmed&amp;quot; Visibility=&amp;quot;{Binding AuthenticationViewModel.CheckUserOfflineSuccess, Source={StaticResource Locator}, FallbackValue=false, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Profiles ==&lt;br /&gt;
Profiles are used to store connection information for {{UBIK}} services. It specifies the location where to find the service along with other useful informations. Profiles are stored by UBIK whenever the user created connection information and stored it in the settings. However, profiles can also be created and edited with any text editor. Possible settings to be defined are:&lt;br /&gt;
* InternalConnectionSettings: Connections settings how to connect to the Content and the USAM service that has been set up.&lt;br /&gt;
** Application: the [[APPLICATION]] to use with the service&lt;br /&gt;
** AuthenticationPort: Port Number of the authentication (USAM) service (default: 777)&lt;br /&gt;
** AuthenticationProtocol: Protocol of the authentication service (default: https)&lt;br /&gt;
** AuthenticationServer: the ip address of the authentication server&lt;br /&gt;
** AuthenticationService: the path to the authentication service&lt;br /&gt;
** ContentPort: Port Number of the content service (default: 777)&lt;br /&gt;
** ContentProtocol: Protocol of the content service (default: https)&lt;br /&gt;
** ContentServer: the ip address of the content server&lt;br /&gt;
** ContentService: the path to the content service&lt;br /&gt;
** Context: the [[CONTEXT]] to use with the service&lt;br /&gt;
** SyncMode: the used sync mode (Online [= Auto], Manual, Offline; default:Online)&lt;br /&gt;
* IsDefault: true, if the profile should be the default profile&lt;br /&gt;
* Name: the name of the profile (will also be used to identify the database)&lt;br /&gt;
** If the profile name contains invalid characters like: /, &amp;quot;, &amp;lt;, &amp;gt;, ... they will be replaced with %_&lt;br /&gt;
* Project: the project name. Use this to share a single project name with more than one profile. If the project is defined, all profile with the same project will share one database.&lt;br /&gt;
* Customizing: the XAML subfolder to use for customized UI. This parameter can be used to share one single XAML customizing folder for multiple profiles.&lt;br /&gt;
* ShowHiddenSettings: show hidden settings (feault: false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Profile xmlns:i=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns=&amp;quot;http://schemas.datacontract.org/2004/07/UBIK.WinX.Settings&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Customizing&amp;gt;MYAPPLICATIONUI&amp;lt;/Customizing&amp;gt;&lt;br /&gt;
  &amp;lt;Description i:nil=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;InternalConnectionSettings&amp;gt;&lt;br /&gt;
    &amp;lt;Application&amp;gt;APP_DEMO&amp;lt;/Application&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationPort&amp;gt;777&amp;lt;/AuthenticationPort&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationProtocol&amp;gt;https&amp;lt;/AuthenticationProtocol&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationServer&amp;gt;80.243.175.50&amp;lt;/AuthenticationServer&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationService&amp;gt;UBIK/DBG/AUG/DEMO.250/USAM/USAM.svc&amp;lt;/AuthenticationService&amp;gt;&lt;br /&gt;
    &amp;lt;ContentPort&amp;gt;777&amp;lt;/ContentPort&amp;gt;&lt;br /&gt;
    &amp;lt;ContentProtocol&amp;gt;https&amp;lt;/ContentProtocol&amp;gt;&lt;br /&gt;
    &amp;lt;ContentServer&amp;gt;80.243.175.50&amp;lt;/ContentServer&amp;gt;&lt;br /&gt;
    &amp;lt;ContentService&amp;gt;UBIK/DBG/AUG/DEMO.250/CONTENT/UBIKContent.svc&amp;lt;/ContentService&amp;gt;&lt;br /&gt;
    &amp;lt;Context&amp;gt;CXT_DEMO&amp;lt;/Context&amp;gt;&lt;br /&gt;
    &amp;lt;SyncMode&amp;gt;Online&amp;lt;/SyncMode&amp;gt;&lt;br /&gt;
  &amp;lt;/InternalConnectionSettings&amp;gt;&lt;br /&gt;
  &amp;lt;IsDefault&amp;gt;true&amp;lt;/IsDefault&amp;gt;&lt;br /&gt;
  &amp;lt;Name&amp;gt;DEMO.250.AT&amp;lt;/Name&amp;gt;&lt;br /&gt;
  &amp;lt;Project&amp;gt;DEMO.250&amp;lt;/Project&amp;gt;&lt;br /&gt;
  &amp;lt;ShowHiddenSettings&amp;gt;false&amp;lt;/ShowHiddenSettings&amp;gt;&lt;br /&gt;
&amp;lt;/Profile&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Content Browser ==&lt;br /&gt;
Allows to navigate through the entire data model in a hierarchical manner, as it is published by the server.&lt;br /&gt;
&lt;br /&gt;
Initially, a list of objects (&amp;quot;root objects&amp;quot;) is shown. Upon selecting an object, a new browser is opened for that object, showing details about it. When an object is selected in the content browser, it is called the browser's context. For such a contextual object, child objects and selected properties are shown. Also, there is a context menu providing actions related to the currently selected object. &lt;br /&gt;
&lt;br /&gt;
=== Status Bar ===&lt;br /&gt;
[[File:UI_WinX_DbSavingIndicator.PNG|300 px|thumb|border|alt=Saving Symbol|Saving Symbol]]&lt;br /&gt;
{{Version/WinXSince|2.5.4}}Whenever content is being saved into the local database (for example, after a branch is downloaded from the server), there will be a blinking symbol indicating the saving activity is happening in the background.&lt;br /&gt;
During that time, the user is advised to not logout or close the app because the content might be lost otherwise. However, it is okay to undertake other tasks such as browsing, editing or downloading branches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Child Page ===&lt;br /&gt;
&lt;br /&gt;
[[File:ChildPage.PNG|400 px|thumb|border|alt=Child Page|Child Page]]&lt;br /&gt;
&lt;br /&gt;
The child page shows the context of a selected object. &lt;br /&gt;
&lt;br /&gt;
The global status bar shows the icon, the name and the description of the selected object. An arrow on the left side allows the user to navigate back to the parent object. On the right side the currently logged-in user is indicated. By clicking on the username one is able to navigate back to the home screen or log off.&lt;br /&gt;
&lt;br /&gt;
The right side of the child page shows child objects of the current object. Each child object is represented by an icon, a name and a description. &lt;br /&gt;
&lt;br /&gt;
On the left side of the child page the current object´s high priority properties are shown. By clicking on a live value property, the live value details dialog opens. By clicking on an editable [[UBIK_WinX_Client_Basics#High_priority_properties| high priority property]], an editor opens {{Version/WinXSince|2.5.4}}. If a property was edited a save button is shown in the lower left corner, allowing the user to commit the changes. If a property of a query object was edited an evaluate button is shown in the lower left corner, allowing the user to run the query with the changed propery.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Details Page ===&lt;br /&gt;
&lt;br /&gt;
=== Context Menu ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
==== Root objects vs child objects ====&lt;br /&gt;
&lt;br /&gt;
The first entry point in the ''Content Browser'' is the list of root objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Task objects ====&lt;br /&gt;
&lt;br /&gt;
==== Query objects ====&lt;br /&gt;
&lt;br /&gt;
==== Safety relevant objects ====&lt;br /&gt;
&lt;br /&gt;
==== Commissioning objects ====&lt;br /&gt;
&lt;br /&gt;
==== Locked objects ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Authentication Properties ====&lt;br /&gt;
Authentication Properties are properties which need a user authentication (through a passwordfield) to be edited.&lt;br /&gt;
&lt;br /&gt;
==== Live value properties ====&lt;br /&gt;
&lt;br /&gt;
==== High priority properties ====&lt;br /&gt;
High priority properties are properties having a priority higher than the [[Settings#Content |priority threshold]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Selective List Properties ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Properties with value records {{Version/WinXSince|2.5.4}} ====&lt;br /&gt;
[[File:UI_WinX_PropertyWithValueRecords.png|thumb|A property with value records]]&lt;br /&gt;
[[File:UI_WinX_PropertyValueRecords.png|thumb|Property value records dialog]]&lt;br /&gt;
In addition to its value, a property might also bring along a series of value records showing &amp;quot;who changed the value at what time&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When such records exist, the property row shows a special symbol on the right side. After a right click (with mouse) or a long tap (with touch) on the property row, a dialog will be shown to present these records (sorted by their time, recent ones on top).&lt;br /&gt;
&lt;br /&gt;
==== String properties with length restrictions ====&lt;br /&gt;
A string property can be configured with a [[MetaProperty#Text_2|length restriction]]. The client property editing UI doesn't allow users to confirm values exceeding the limit.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
==== Editors ====&lt;br /&gt;
&lt;br /&gt;
===== Geo Editor &amp;amp; Teach In =====&lt;br /&gt;
&lt;br /&gt;
==== Guid editor ====&lt;br /&gt;
[[File:Guid_property_dialog.PNG|thumb|border|alt=Guid property editor dialog|Guid property editor dialog]]&lt;br /&gt;
&lt;br /&gt;
To edit Guid properties (that do not have a selective list available), we have implemented a special system. Since a Guid property always just contains the Guid as a reference to another object, we can use a query to find the object we want to assign to this property.&lt;br /&gt;
&lt;br /&gt;
When the Guid property has a FilterQuery datamember (which should contain the guid of a query), it will become editable through this query. Note that this FilterQuery guid will not actually be visible in the client. All this should be setup in the backend, the client has no control over this.&lt;br /&gt;
&lt;br /&gt;
When clicking an editable Guid property, you will see a dialog with up to 3 extra buttons added (see image):&lt;br /&gt;
&lt;br /&gt;
;View Object&lt;br /&gt;
:This button will be enabled when there is a valid guid assigned to the property. Clicking this button will immediately navigate to the referenced object.&lt;br /&gt;
;Edit Property&lt;br /&gt;
:If the property has a valid FilterQuery assigned to it, clicking this button will launch that query. If no FilterQuery is assigned, this button will be invisible.&lt;br /&gt;
;Clear Property Value&lt;br /&gt;
:If the property has a guid assigned, the user can press this button to reset the value back to empty.&lt;br /&gt;
&lt;br /&gt;
Additionally, if a valid FilterQuery is assigned, the user will see the results of that query ''inline'', if the query delivers 200 results or fewer. The user can select an item from this horizontally scrollable list, and press &amp;quot;OK&amp;quot; to assign the UID of the selected object to the Guid property. This is useful for cases where the user does not want to jump into the full query to be able to select an object.&lt;br /&gt;
&lt;br /&gt;
If the user does choose to launch the full query page (or if the query returns over 200 objects), they can click any of the displayed items in the query's child list. When clicking one of them, it will immediately be set as the reference in the original Guid property. To cancel selecting an item (and stop editing the property), simply navigate to any other page (by pressing back, using navigation bar, etc).&lt;br /&gt;
&lt;br /&gt;
{{hint|'''Skipping the dialog'''&lt;br /&gt;
If editing the property in a query page without having to go through the dialog is desired, one can customize the boolean variable &amp;quot;SkipQueryDialog&amp;quot; in UBIKThemes.xaml. If none can be found, simply add the following line into its &amp;quot;Default&amp;quot; ResourceDictionary.&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&amp;lt;x:Boolean x:Key=&amp;quot;SkipQueryDialog&amp;quot;&amp;gt;True&amp;lt;/x:Boolean&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Pages with broken file links|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
=== Documents ===&lt;br /&gt;
UBIK supports and displays document objects and a bunch of actions related to them (editing, redlining, creation, thumbnails, ...).&lt;br /&gt;
&lt;br /&gt;
==== Fit Mode{{Version/WinXSince|3.5}} ====&lt;br /&gt;
By default, documents are displayed in their original dimensions. But administrators can also [[SYSCLS_DOCUMENT_FITMODE|configure different fit modes]] for each document. The following demonstrates how documents can look under different fit modes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;100%&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Unspecified / Unscaled / Default !! Fit to container !! Fit to width !! Fit to height&lt;br /&gt;
|-&lt;br /&gt;
| [[File:UI_WinX_FitMode_Unspecified_Small.png|240x225px]] || [[File:UI_WinX_FitMode_Container_Small.png|240x225px]] || [[File:UI_WinX_FitMode_Width_Small.png|240x225px]] || [[File:UI_WinX_FitMode_Height_Small.png|240x225px]]&lt;br /&gt;
|-&lt;br /&gt;
| [[File:UI_WinX_FitMode_Unspecified_Large.png|240x225px]] || [[File:UI_WinX_FitMode_Container_Large.png|240x225px]] || [[File:UI_WinX_FitMode_Width_Large.png|240x225px]] || [[File:UI_WinX_FitMode_Height_Large.png|240x225px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Attention|When using a FlipView for documents in your customized XAMLs, you need to additionally [[XAML_Tips#Fit_mode|apply the fit mode]] by yourself. }}&lt;br /&gt;
{{Attention|This feature currently only works for PDFs (it is not supported for Images). }}&lt;br /&gt;
{{Hint|Double tapping on a document toggles the display between &amp;quot;Fit to width&amp;quot; and the fit mode that document is configured with.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Pages with broken file links|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
==== Customizing Possibilities ====&lt;br /&gt;
&lt;br /&gt;
==== Editing{{Version/WinXSince|2.5.4}} ====&lt;br /&gt;
[[File:UI_WinX_EditDocumentButton.png|thumb|Button to edit a document]]&lt;br /&gt;
For [[SYSCLS_EDITABLEDOCUMENT|editable documents]], there is an {{key press|edit}} button in the bottom app bar. It allows the user to edit a document file using the default app of the OS. If a file is changed during the edit, the same {{key press|save}} button appears just like it does for content with changed properties.&lt;br /&gt;
{{Hint|Similar to saving, other app features also apply on edited documents. For example, reverting local changes for an edited document will throw away the changed document file and restore it to the server version.}}&lt;br /&gt;
[[File:UI_WinX_EditDocumentOverlayButton.png|thumb|Edit button in thumbnail overlay]]&lt;br /&gt;
An alternative way to start editing is to right click on a document's thumbnail, which brings up an overlay of buttons, and then select the {{key press|edit}} button. The difference here is that there is no {{key press|save}} button and any changes are automatically saved (and committed if in online mode).&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
==== Offline availability ====&lt;br /&gt;
When a user selects a branch to bring offline, files of all document objects underneath are downloaded in principle. However, they can also be selectively configured to be ignored with a [[SYSCLS_OFFLINE_AVAILABLE_DOCUMENT|classification]] on the server-side. Once a document is classified as offline available, the document file will not be removed when the storage for already synchronized document files is cleared.&lt;br /&gt;
{{Hint|This is not to be confused with the accessibility related to [[User_Rights|user rights]]. The logic here is &amp;quot;some documents '''do not have to''' be downloaded&amp;quot;, not &amp;quot;some documents '''can not''' be downloaded/accessed&amp;quot;. In other words, a user can browse to and open the document regardless of this configuration.}}&lt;br /&gt;
&lt;br /&gt;
==== Clear Online Documents ====&lt;br /&gt;
By clearing the online documents, it is possible to free up system memory if needed. It can be triggered by pressing the button &amp;quot;Clear online documents&amp;quot; in the general settings tab. Online documents are documents already uploaded to the server. They can be downloaded anytime agian when the client is connected to the server. However, documents classified as offline available will not be affected and will always stay on the device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AR Features ==&lt;br /&gt;
&lt;br /&gt;
=== POI View ===&lt;br /&gt;
Brings up the POI View|Augmented Reality view and displays Points of Interest (POI's) related to the current location of the mobile device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Markerless ===&lt;br /&gt;
&lt;br /&gt;
=== Map View ===&lt;br /&gt;
Opens the Map View and displays Points of Interest (POI's) related to the current location of the mobile device.&lt;br /&gt;
&lt;br /&gt;
== Positioning ==&lt;br /&gt;
{{UBIK}} clients use a [[Location_Manager|Location Manager]] in order to gain knowledge about their position, so it can help the user navigate to his/her target.&lt;br /&gt;
&lt;br /&gt;
The user can choose one of different positioning modes optimized for different environments.&lt;br /&gt;
Most of them incorporate multiple technologies for calculating positions or checking their reliability.&lt;br /&gt;
&lt;br /&gt;
=== Positioning modes ===&lt;br /&gt;
&lt;br /&gt;
* ''Use all'' - uses all available position sources&lt;br /&gt;
* ''LLA only mode'' - used for positioning using markers only&lt;br /&gt;
* ''Beacon Proximity mode'' - uses iBeacon proximity and LLA only&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
&lt;br /&gt;
==== GPS ==== &lt;br /&gt;
GPS is used as a primary positioning input source for outdoor areas. Its precision depends on the environment and satellite availability. With good circumstances, the accuracy varies between 1 and 10 meters.&lt;br /&gt;
&lt;br /&gt;
==== LLA markers ==== &lt;br /&gt;
LLA markers basically are QR codes with location data encoded into them - which can be used for positioning when they are scanned.&lt;br /&gt;
&lt;br /&gt;
==== Object Proximity Positioning ====&lt;br /&gt;
The location of nearby Geo-Objects can be used for positioning.&lt;br /&gt;
&lt;br /&gt;
The position of a Geo-Object can be used manually by pushing the button {{key press|Use Location}} in the [[UBIK_WinX_Client_Basics#Context_Menu|Context Menu]]. &lt;br /&gt;
&lt;br /&gt;
The geo information of an object gets used automatically if exactly one single object is found through scanning. If more objects are found, their geo information doesn´t get used. Scanning includes  [[UBIK Client Basics#Bar Code|Bar Code]], [[UBIK Client Basics#QR Code|QR Code]], [[UBIK Client Basics#OCR|OCR]] and [[UBIK Client Basics#RFID|RFID]]. The automatic use of Geo-Object´s location can be turned off by disabling the &amp;quot;EnableObjectProximityPositioning&amp;quot; setting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beacon-Proximity Positioning ====&lt;br /&gt;
The Beacon Proximity Mode detects if the user is in the proximity of a beacon. The proximity region is defined by a proximity distance which creates a sphere around the beacon. Whenever the calculated distance to a beacon is smaller than the proximity distance, the user is supposed to be at the position of the beacon. If multiple regions intersect the user is supposed to be at the position of the nearest beacon. &lt;br /&gt;
In order to use Beacon Proximity as a Positioning System, Bluetooth Low Energy has to be available and enabled on the mobile device. If a new environment should be equipped with iBeacon-Positioning, an expert has to mount iBeacons on known positions and calibrate the propagation factor of these beacons. Proximity beacons can be configured using [[SYSCLS_PROXIMITY_BEACON]]. {{Version/WinXSince|UWP}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Finding Objects ==&lt;br /&gt;
=== Free Text Search ===&lt;br /&gt;
&lt;br /&gt;
=== ID Marker ===&lt;br /&gt;
&lt;br /&gt;
=== QR Code ===&lt;br /&gt;
&lt;br /&gt;
=== Bar Code ===&lt;br /&gt;
&lt;br /&gt;
=== RFID Code ===&lt;br /&gt;
Provides a fast and convenient way for users to find objects that are identifiable through [[RFID tags|RFID tags]].&lt;br /&gt;
&lt;br /&gt;
=== OCR ===&lt;br /&gt;
&lt;br /&gt;
== Linked objects == &lt;br /&gt;
{{Version/WinXSince|3.6}}&lt;br /&gt;
It is possible to display values of linked objects by using the &amp;quot;LinkedLevel&amp;quot; property. An example can be seen here, where Items[0] is a Guid property linking to another object. The ItemsControl then binds to the Properties of the linked object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid DataContext=&amp;quot;{Binding Properties.Items[0].LinkedLevel}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ItemsControl ItemsSource=&amp;quot;{Binding Properties.AllItems}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Pages with broken file links|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Client_Feature_Table]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Pages with broken file links|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=SYSCLS_REQUIRE_AUTHENTICATION&amp;diff=23615</id>
		<title>SYSCLS REQUIRE AUTHENTICATION</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=SYSCLS_REQUIRE_AUTHENTICATION&amp;diff=23615"/>
				<updated>2022-04-21T12:03:21Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ClassificationInfoBox&lt;br /&gt;
| title = Require Authentication Classification Object &lt;br /&gt;
| name = {{PAGENAMEE}}&lt;br /&gt;
| inheritance = -&lt;br /&gt;
| namespace = System.Classification.Content&lt;br /&gt;
| purpose = Classify properties as properties requiring authentication before being edited&lt;br /&gt;
| version = 3.6.2+&lt;br /&gt;
| id = {B3F15445-0867-4EE7-8D29-2B2BC9665EE0 }&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If a property is classified as/with require access, UBIK clients will force the user to authenticate themselves before being allowed to edit the property value.&lt;br /&gt;
&lt;br /&gt;
{{Category/Version|3.6.2}}&lt;br /&gt;
&lt;br /&gt;
[[Category:3.6.2|SYSCLS REQUIRE AUTHENTICATION]]&lt;br /&gt;
[[Category:Classifications|SYSCLS REQUIRE AUTHENTICATION]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Settings&amp;diff=23611</id>
		<title>Settings</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Settings&amp;diff=23611"/>
				<updated>2022-04-14T13:09:59Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* Location */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Android=&lt;br /&gt;
&lt;br /&gt;
Settings list provides a list of all the settings that control the client environment, giving the user the possibility to display and configure these settings. The settings are ordered according to theme, the part of environment it's responsible for controlling. Within each theme the settings are sorted alphabetically. Mandatory settings are indicated with a {{key press|*}}  next to the name.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Available settings ==&lt;br /&gt;
All users have at least access to all settings statet in [[#List of settings|List of settings]]. Additional settings, namely the [[#AR settings|AR settings]] or [[#Demo settings|Demo settings]] are only available if the regarding plugin is part of the application built. {{Tip/Version|Since version 2.5.0 the former system of global settings and user-specific settings has been replaced by user-specific settings only.}}&lt;br /&gt;
&lt;br /&gt;
=== List of settings ===&lt;br /&gt;
&lt;br /&gt;
The basic stock of settings includes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;75%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name!! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| ''AuthServerName''|| The name of the server to connect to for user authentication&lt;br /&gt;
|-&lt;br /&gt;
| ''AuthPortNumber''|| The port number to use when connecting to the authentication server (optional)&lt;br /&gt;
|-&lt;br /&gt;
| ''AuthProtocol''|| The protocol to use for authentication over the Internet (e.g.: HTTPS). {{Version/AndroidSince|2.4.2}}&lt;br /&gt;
|-&lt;br /&gt;
| ''UBIKAuthContentService''|| The name of the UBIK authentication service&lt;br /&gt;
|-&lt;br /&gt;
| ''MemoryUsage''|| Whether {{UBIK}} should [[Memory Usage (Android)|lazy load]] or [[Memory Usage (Android)|eager load]] all the content. {{Version/AndroidSince|2.4.0}}&lt;br /&gt;
|-&lt;br /&gt;
| ''Protocol''|| The protocol to use for data communication over the Internet (e.g.: HTTPS)&lt;br /&gt;
|-&lt;br /&gt;
| ''PortNumber''|| The port number to use when connecting to the content server (optional)&lt;br /&gt;
|-&lt;br /&gt;
| ''PriorityThreshold''|| Any property with a priority number greater than this integer setting value is regarded as a high priority property and is highlighted when being displayed&lt;br /&gt;
|-&lt;br /&gt;
| ''UpdateExpirySeconds''|| The number of seconds one has to wait before the same update will be considered necessary. If an update of certain content has just ended successfully and is requested again within the amount of time configured in this setting, the client simply dismisses the new request. However, this setting does not affect [[Forced Updates in Manual Synchronization Mode]].&lt;br /&gt;
|-&lt;br /&gt;
| ''SyncMode''|| The possible values are '''Automatic''', '''Manual Commit''' and '''Offline'''. For more details, please refer to [[Sync Mode]].&lt;br /&gt;
|-&lt;br /&gt;
| ''ShowSystemProperties''|| If set to true, all properties will be displayed; otherwise, only the ones that are marked as [[METACLASSSCOPE#Visibility|visible]].&lt;br /&gt;
|-&lt;br /&gt;
| ''UBIKContextName''|| The {{UBIK}} [[CONTEXT]] name&lt;br /&gt;
|-&lt;br /&gt;
| ''UBIKApplicationName''|| The {{UBIK}} [[APPLICATION]] name&lt;br /&gt;
|-&lt;br /&gt;
| ''UBIKContentService''|| The name of the {{UBIK}} content service&lt;br /&gt;
|-&lt;br /&gt;
| ''ServerName''|| The name of the server to connect to for fetching content&lt;br /&gt;
|-&lt;br /&gt;
| ''ExpectSingleSearchResult''|| If checked, single search results will be displayed in the ContentBrowser immediately instead of being shown in the result list. Available since {{Version/Android|2.5.0}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== AR settings ===&lt;br /&gt;
The AR plugin has additional settings:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;75%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name!! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| ''CompassOffsetDegrees'' || The offset in degrees to change the magnetic north and therefore the orientation of the device (global setting).&lt;br /&gt;
|-&lt;br /&gt;
| ''Pose Estimation Systems''|| The different  pose estimation systems considered in the [[Location Manager]] can be activated or deactivated with this setting.&lt;br /&gt;
|-&lt;br /&gt;
| ''SpatialiteDbPath''|| The path to the sqlite database containing the routing graph. It will be looked for on the public internal storage (Google calls that the &amp;quot;Primary External Storage&amp;quot;), which is NOT the SD-card.&lt;br /&gt;
|-&lt;br /&gt;
| ''StandardMapZoomLevel''|| Specifies the zoom level, which should be applied when using the zoom features of the [[Map_View]].&lt;br /&gt;
|-&lt;br /&gt;
| ''DefaultMapZoomLocation''|| Specifies the position, which should be zoomed to when opening the [[Map_View]] after login.&lt;br /&gt;
|-&lt;br /&gt;
| ''ContentDistanceFilterThreshold''|| The threshold in meters up to which billboards are displayed in Augmented Reality activities; also influences the scaling of billboards depending on their distance. {{Version/AndroidSince|2.5.4}}&lt;br /&gt;
|-&lt;br /&gt;
| ''NFC Scan Result Type''|| Specifies the type of information, which should be extracted from scanned [[RFID tags]]. {{Version/AndroidSince|3.0.0}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Demo settings ===&lt;br /&gt;
&lt;br /&gt;
Additionally, the demo application and its unique user specific settings are listed as follows&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;75%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name!! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| ''NumberPropertyEditor''|| Whether to use the normal keyboard or the [[UBIK Number Pickers]] for editing numeric properties&lt;br /&gt;
|-&lt;br /&gt;
| ''CurrentAltitude''|| The (mock) altitude in meters to use in Augmented Reality activities, for non-manual locations (e.g. GPS, since the altutide for this is too inaccurate)&lt;br /&gt;
|-&lt;br /&gt;
| ''AltitudeOffset''|| The offset in meters to add to the current altitude in Augmented Reality activities (used for configuration of the device height)&lt;br /&gt;
|-&lt;br /&gt;
| ''ContentDistanceFilterThreshold''|| The threshold in meters up to which billboards are displayed in Augmented Reality activities&lt;br /&gt;
|-&lt;br /&gt;
| ''SupportIntentTarget''|| The actual Uri / Activity class / app package to be opened as an Android intent when the support action is triggered. {{Version/AndroidSince|2.5.2}}&lt;br /&gt;
|-&lt;br /&gt;
| ''SupportIntentType''|| The type of the target (URI/APP_PACKAGE/ACTIVITY_CLASS) to be opened as an Android intent when the support action is triggered. {{Version/AndroidSince|2.5.2}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Characteristics of settings ==&lt;br /&gt;
&lt;br /&gt;
Settings have the following characteristics and behavior within the application:&lt;br /&gt;
* Available and editable before and after the login.&lt;br /&gt;
* Changes done before login are applied to the next user who attempts to login.&lt;br /&gt;
** This goes for applying presets as well.&lt;br /&gt;
** After applying a preset, changes of settings are also applied.&lt;br /&gt;
** The settings defined are not just used by the user as new settings configuration, but are merged with the settings the user already has, and are overriding them. &lt;br /&gt;
* Changes after login are saved for the user currently logged in. After logout and new login, they are restored, merged with the settings changed before login if there are some and finally they get applied to the user.&lt;br /&gt;
* If a completely new user attempts to login without defining settings before or loading a preset, the default values of the settings as defined for the respective app are used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PreSet actions ==&lt;br /&gt;
&lt;br /&gt;
=== Load PreSets ===&lt;br /&gt;
&lt;br /&gt;
The {{key press|Load PreSet}} button can be used to [[HowTo:Load Presets]] onto the settings.&lt;br /&gt;
&lt;br /&gt;
=== Save PreSets ===&lt;br /&gt;
&lt;br /&gt;
The {{key press|Save PreSet}} button that is only available after login, can be used to [[HowTo:Save Settings as Presets]].&lt;br /&gt;
&lt;br /&gt;
= WinX =&lt;br /&gt;
&lt;br /&gt;
There are several categories of settings, each providing a group of configurable options for (a) specific feature(s).&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
This initial section in the Profile description contains some general settings.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;75%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name!! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| ''AutoBranchSync''|| Denotes whether the automatic branch download below an object will be synchronized automatically or not. It is set to &amp;quot;false&amp;quot; by default.&lt;br /&gt;
|-&lt;br /&gt;
| ''AutoBranchSyncPeriod''|| Denotes the period for automatic branch synchronization in minutes. Its value is set to &amp;quot;0&amp;quot; by default, when the ''AutoBranchSync'' is set to false. Otherwise it should take an other figure.&lt;br /&gt;
|-&lt;br /&gt;
| ''BranchDownloadSubLevels''|| Determines how a branch download is performed. If not configured (equals to '''0''' by default), an entire branch is downloaded in one attempt. If set to 1 for example, the 1st level children of the selected root is first analyzed, then sub branch downloads are performed for each of the children. Basically the higher the number, the more &amp;quot;fragmented&amp;quot; the branch download becomes. This usually increases the overall download time, but can be helpful for scenarios like really large branches or unstable networks since it has a better chance of finishing smaller individual downloads.&lt;br /&gt;
|-&lt;br /&gt;
| ''Customizing''|| Denote your specific folder for XAMLs that depict how the Content is displayed, here. If, by default, the value is set to ''i:nil='''true''''', then the specific XAML folder is denoted by the name of the Profile at the bottom of the Profile Description.&lt;br /&gt;
|-&lt;br /&gt;
| ''UICompatibilityLevel''|| Determines which UI versions the client app should try to be compatible with. In major version updates, UI redesigns can happen and sometimes old UI components might even be completely removed. For example, the app bars are removed since {{Version/WinXSince|4.0}} (level 400) because their features are embedded into other parts of the new UI. For those who want to stick with the previous UI for a while, this setting just needs to set to a level earlier, e.g. 380.&lt;br /&gt;
|-&lt;br /&gt;
| ''ExpertMode''|| This boolean field denotes whether the Metadefinitions are loaded whenever the Profile of the App is loaded anew or not. By default the value is set to '''false''', i.e. the Metadefinitions are only loaded when the Application is initialized the first time, or when all data has been purged.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Attention|The UICompatibilityLevel setting tells the client app to be compatible to the specified versions of the UI if possible. This doesn't mean all existing UI customizings are still supported in newer versions of the app. In fact, any feature where this setting has an effect will explicitly mention it. Otherwise, you should always check the &amp;quot;XAML Notes&amp;quot; tab of each version's release note page.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Connection ==&lt;br /&gt;
This section contains properties to denote the internal connection settings of the App.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;75%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name!! Purpose&lt;br /&gt;
|-&lt;br /&gt;
|''Application'' || Denotes the name of the Application that will be run, e.g. one could use ''YourApp'' as the name for an Application.&lt;br /&gt;
|-&lt;br /&gt;
|''AuthenticationPort'' || Denotes the Port used on the Authentication Server. Default values might be: ''443; 777; 888;''&lt;br /&gt;
|-&lt;br /&gt;
|''AuthenticationProtocol'' || Denotes which Transfer Protocol for Authentication might be used. By default ''https'' is used.&lt;br /&gt;
|-&lt;br /&gt;
|''AuthenticationServer'' || Denotes the Authentication Server, e.g. ''your.auth-server.net'' could be used.&lt;br /&gt;
|-&lt;br /&gt;
|''AuthenticationService'' || Denotes the path on the Authentication Server to the Authentication Service File, e.g. the path might be ''YourFolder/YourApp/USAM/USAM.svc''. In this case the User System Authentication Manager (USAM) is used.&lt;br /&gt;
|-&lt;br /&gt;
|''AuthenticationServiceConfig'' || WSHttpBinding (the default value) or BasicHttpBinding. It should be set according to the [[Configuration_Files/Services.config|webservice configuration]].&lt;br /&gt;
|-&lt;br /&gt;
|''ConnectionTimeOut'' || Denotes the time in seconds when a web service call is dropped by the app. It's necessary so that the app doesn't wait indefinitely in events such as connection lost. The default value is ''300'' seconds. If you know your individual web service calls will take longer, the value should be increased accordingly.&lt;br /&gt;
|-&lt;br /&gt;
|''ContentPort''  || Denotes the Port used on the Content Server. Default values might be: ''443; 777; 888;'' Often it is the same port as for the one for the Authentication Server.&lt;br /&gt;
|-&lt;br /&gt;
|''ContentProtocol'' || Denotes which Transfer Protocol for the Content might be used. By default ''https'' is used.&lt;br /&gt;
|-&lt;br /&gt;
|''ContentServer'' || Denotes the Content Server, e.g. ''your.content-server.net'' could be used. Could be the same server as the Authentication Server.&lt;br /&gt;
|-&lt;br /&gt;
|''ContentService'' || Denotes the path on the Content Server to the Content Service File, e.g. the path might be ''YourFolder/YourApp/CONTENT/UBIKContent.svc''. Make sure that the path points to the ''UBIKContent.svc'' file.&lt;br /&gt;
|-&lt;br /&gt;
| ''ContentServiceConfig''|| WSHttpBinding (the default value) or BasicHttpBinding. It should be set according to the [[Configuration_Files/Services.config|webservice configuration]].&lt;br /&gt;
|-&lt;br /&gt;
|''Context'' || Denotes the name of the Context, e.g. ''CXT_YourApp_001''. This context is specified inside UBIK and all the different Metadefintions are loaded from it.&lt;br /&gt;
|-&lt;br /&gt;
|''SignalingServer'' || Denotes the Server for Remote Support.&lt;br /&gt;
|-&lt;br /&gt;
|''SyncMode'' || Denotes the Synchronization Mode of the Application. Possible Values are: Online, Offline, Auto; by default the SyncMode is set to ''Online''.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Content ==&lt;br /&gt;
These internal content settings control the behaviors and activities of the content data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;75%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name!! Purpose&lt;br /&gt;
|-&lt;br /&gt;
|''AutoSaveMode'' || If this boolean field is set ''true'' changed Objects will be saved automatically when users leave the relevant pages. Otherwise, the User will see a save button and be asked to save the changes when leaving the relevant pages.&lt;br /&gt;
|-&lt;br /&gt;
|''ChildPageChildrenPortion'' || Denotes the Portion of the visible Content Page Area that is split between the Children of an Object and its Properties. Usually the value is between ''0'' and ''100''. By default it is normally set to ''67'', i.e. taking two thirds of the Content Page Area to display Children of a given Object.&lt;br /&gt;
|-&lt;br /&gt;
|''ChildPagePropertyPortion'' || Denotes the Portion of the visible Content Page Area that is split between the Properties of an Object and its Children . Usually the value is between ''0'' and ''100''. By default it is normally set to ''33'', i. e. taking one third of the Content Page Area to display Properties of a given Object.&lt;br /&gt;
|-&lt;br /&gt;
|''DetailsPageChildrenPortion'' || Denotes the Portion of the visible Details Page Area that is split between the Children of an Object and its Properties. Usually the value is between ''0'' and ''100''. By default it is normally set to ''67'', i.e. taking two thirds of the Details Page Area to display Children of a given Object.&lt;br /&gt;
|-&lt;br /&gt;
|''DetailsPagePropertyPortion'' || Denotes the Portion of the visible Details Page Area that is split between the Properties of an Object and its Children . Usually the value is between ''0'' and ''100''. By default it is normally set to ''33'', i. e. taking one third of the Details Page Area to display Properties of a given Object.&lt;br /&gt;
|-&lt;br /&gt;
|''DocumentInternalMode'' || Denotes whether a Document is truly displayed only inside of the Application, then the boolean field should be set to ''true''. If there should be a preview of the Document available inside the Application only and the Document is to be opened by an external Application, the boolean field should be set to ''false''. By default the field is set to ''false''.&lt;br /&gt;
|-&lt;br /&gt;
|''DocumentPageChildrenPortion'' || Denotes the Portion of the visible Document Page Area that is split between a Document lying beneath an Object and its Properties. Usually the value is between ''0'' and ''100''. By default it is normally set to ''80'', i.e. taking  80% of the Document Page Area to display a Document connected to a given Object.&lt;br /&gt;
|-&lt;br /&gt;
|''DocumentPagePropertyPortion'' || Denotes the Portion of the visible Document Page Area that is split between the Properties of an Object and a Document belonging to it . Usually the value is between ''0'' and ''100''. By default it is normally set to ''20'', i. e. taking 20% of the Document Page Area to display Properties of a Document belonging to a given Object.&lt;br /&gt;
|-&lt;br /&gt;
|''DocumentPagePropertyWidth'' || Denotes the maximum width (in pixels) that Properties of a Document can take when a Document belonging to an Object is displayed. By default the value is ''300 px''. &lt;br /&gt;
|-&lt;br /&gt;
|''EnableSyncLogging'' || Denotes whether a logging of different events, e.g. loading an object, changing a Property on an Object, etc. should take place. By default this boolean field is set to ''true''.&lt;br /&gt;
|-&lt;br /&gt;
|''EnableAutoBranchDownload'' || Denotes whether [[Branch_Download#Automatic_Download|auto branch download]] should be allowed. By default this boolean field is set to 'false''.&lt;br /&gt;
|-&lt;br /&gt;
|''GeoDistanceSorting'' || Denotes whether the Children of an Object should be displayed in a ranking of geographic distance to the Parent Object. By default this boolean field is set ti ''true''.&lt;br /&gt;
|-&lt;br /&gt;
|''NextLevelClassificationPreload'' || When set to false, provides the possibility to override the effect of [[SYSCLS_PRELOAD_CHILDREN]], namely to prevent the preload. See the link for more details.&lt;br /&gt;
|-&lt;br /&gt;
| ''PriorityThreshold''|| Any property with a priority number greater than this integer setting value is regarded as a high priority property and is highlighted when being displayed&lt;br /&gt;
|-&lt;br /&gt;
| ''Update Expiry''|| Determines how long (in seconds) freshly updated content becomes outdated and will be updated again when the user browses to it.&lt;br /&gt;
|-&lt;br /&gt;
| ''[[Content_Logging#Log_setting|Content Logging'']]|| Determines whether certain content related activities should be recorded as log files.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Push==&lt;br /&gt;
These internal push settings control the behaviors and activities of pushed data. For general information see [[Push Service (Client)|{{UBIK}} Push Service]].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;75%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name!! Purpose&lt;br /&gt;
|-&lt;br /&gt;
|''ActivatePush'' || This boolean field denotes whether new resp. changed data should be pushed to other clients, which might be running the Application at the same time, or not. &lt;br /&gt;
|-&lt;br /&gt;
|''PushPollingIntervalSeconds'' || Denotes the interval in seconds for the client to retrieve newly pushed data from the server.&lt;br /&gt;
|-&lt;br /&gt;
|''PushPort'' || Denotes the Port Number to use when connecting to the Push Server (optional), might be set to the same Port number as the Content Port Number.&lt;br /&gt;
|-&lt;br /&gt;
|''PushProtocol'' || Denotes which Transfer Protocol for the Push might be used. By default ''https'' is used.&lt;br /&gt;
|-&lt;br /&gt;
|''PushServer'' || Denotes the Push Server, e.g. ''your.push-server.net'' could be used. Could be the same server as the Content Server.&lt;br /&gt;
|-&lt;br /&gt;
|''PushService'' || Denotes the path on the Push Server to the Push Service File, e.g. the path might be ''YourFolder/YourApp/PUSH/UBIKPush.svc''. Make sure that the path points to the ''UBIKPush.svc'' file.&lt;br /&gt;
|-&lt;br /&gt;
|''ShowPushMessage'' || This boolean field denotes whether the User is informed about an occurring Push, or not. By default it is set to ''false''.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scan==&lt;br /&gt;
These internal scan settings control the behaviors and activities of scanned data. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;75%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name!! Purpose&lt;br /&gt;
|-&lt;br /&gt;
|''CurrentBarcodeFormats'' || Refers to a Microsoft definition for QR Codes, denoted in [http://schemas.microsoft.com/2003/10/Serialization/Arrays]&lt;br /&gt;
|-&lt;br /&gt;
|''CurrentOCRProfileIndex'' || Specifies a certain OCR Profile. Yet, in the client in the camera settings you can also specify the OCR Profile. &lt;br /&gt;
|-&lt;br /&gt;
|''PostProcessRegex'' || If this field is set to ''true'', you can specify how a text based Code has to look like in the client settings.&lt;br /&gt;
|-&lt;br /&gt;
|''ScanARMarker'' || This boolean field denotes whether an ARMarker can be scanned and will be recognized. &lt;br /&gt;
|-&lt;br /&gt;
|''ScanCodes'' || This boolean field denotes whether 2D-Codes, e.g. Barcode, QRCode, etc. can be scanned and will be recognized.&lt;br /&gt;
|-&lt;br /&gt;
|''ScanOCR'' || This boolean field denotes whether an OCRMarker can be scanned and will be recognized.&lt;br /&gt;
|-&lt;br /&gt;
|''UnlockByScanTimeOut'' || This numeric field denotes whether a normally locked object can be unlocked for changes for a certain amount of time (in seconds).&lt;br /&gt;
|-&lt;br /&gt;
|''CodesTryInverted'' || This boolean field denotes whether the client should try to scan color inverted 2D codes. The default value is &amp;quot;false&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Session==&lt;br /&gt;
These internal session settings control the behaviors and activities of a session. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;75%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name!! Purpose&lt;br /&gt;
|-&lt;br /&gt;
|''AlternativeViewMode'' || By default this boolean field is set to ''false''. If set ''true'', it denotes that there is more than one View mode available.&lt;br /&gt;
|-&lt;br /&gt;
|''ZoomedInMode'' || If this boolean flag is set true, the Children of an Object are shown as Tiles. Otherwise they are shown as List items.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Final Settings ==&lt;br /&gt;
These final settings control the behaviors and activities of a profile. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;75%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name!! Purpose&lt;br /&gt;
|-&lt;br /&gt;
|''IsFavorite'' || This boolean field denotes whether the Profile will be shown as a favourite on top of a list when there are also other Profiles in the Application client available.&lt;br /&gt;
|-&lt;br /&gt;
|''LastUsed'' || Contains a Timestamp when this profile was used the last time. &lt;br /&gt;
|-&lt;br /&gt;
|''MultiUserMode'' || When set to ''false'', {{UBIK}} can only remember a single user per profile and will automatically log that user in when a profile is selected. When set to ''true'', the credential remembering feature becomes unavailable. However, this is no longer relevant {{Version/WinXSince|3.6}} because the new version(s) can remember multiple users per profile.&lt;br /&gt;
|-&lt;br /&gt;
|''Name'' || This field denotes the name of the Profile. Note: If there is no special folder named in the ''Customizing'' field, then this name here will also be taken to retrieve the XAMLs from the according Folder with the same name.&lt;br /&gt;
|-&lt;br /&gt;
|''Project'' || This field can name a special project. It might be common to have the carry the same name as the ''Name'' field. Carrying the value ''i:nil=true'' means that ...&lt;br /&gt;
|-&lt;br /&gt;
|''ShowHiddenSettings'' || By default this boolean field is set to ''false'', i.e. no hidden settings are shown.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Augmented Reality ==&lt;br /&gt;
&lt;br /&gt;
== Maps ==&lt;br /&gt;
These settings control the behaviors of the [[Map View|map]] throughout the app.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;75%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name!! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| ''Map Type''|| Determines which base map image will be used in the map.&lt;br /&gt;
|-&lt;br /&gt;
| ''Default Zoom Level''|| Controls how closely zoomed in the map should be whenever it is shown.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;75%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name!! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| ''Camera Device''|| Specifies which camera to use in the app.&lt;br /&gt;
|-&lt;br /&gt;
| ''Camera Resolution''|| Specifies which camera resolution to use in the app.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{Hint|The camera preview window in the settings is hidden when the camera is currently in use in e.g. the POI view or the scan view. However, a user can still change the relevant settings and see the immediate results.}}&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;75%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name!! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| ''Calibration Heading''|| Specifies the heading that is used when manually calibrating the orientation sensor.&lt;br /&gt;
|-&lt;br /&gt;
| ''Location Mode''|| Specifies the Location Mode.&lt;br /&gt;
|-&lt;br /&gt;
| ''Use PoseFusion''|| Specifies whether PoseFusion is used or not.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Settings]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Location_Manager&amp;diff=23610</id>
		<title>Location Manager</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Location_Manager&amp;diff=23610"/>
				<updated>2022-04-14T13:02:45Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* WinX */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Android=&lt;br /&gt;
&lt;br /&gt;
The Location Manager aims to calculate the device pose (position and orientation) as accurate as possible using various input sources. The performance of pose estimation can be characterised by the following measures:&lt;br /&gt;
&lt;br /&gt;
* Accuracy --&amp;gt; describes the average offset between real and estimated device pose&lt;br /&gt;
* Standard Deviation --&amp;gt; describes to which extend the estimated pose “jumps” around the real device pose&lt;br /&gt;
* Update Rate --&amp;gt; describes how often the device pose can be updated. &lt;br /&gt;
&lt;br /&gt;
To maximise the performance, the Location Manager combines and filters estimated poses from various Pose Estimation Systems based on their estimated error levels. Pose Estimation systems can be activated and deactivated using the [[Settings#AR_settings|Pose Estimation Systems Setting]]. Currently the following pose estimation systems are available:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;50%&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Estimated Quantity !! Required Sensor Technology&lt;br /&gt;
|-&lt;br /&gt;
| [[AR-Marker Device Pose Estimation|AR-Marker]] || Position and Orientation || Camera&lt;br /&gt;
|-&lt;br /&gt;
| [[Beacon Proximity|Beacon Proximity]] || Position || Bluetooth Low Energy (Bluetooth 4.0)&lt;br /&gt;
|-&lt;br /&gt;
| [[Compass|Compass]] ||  Orientation || Accelerometer and Magnetometer&lt;br /&gt;
|-&lt;br /&gt;
| [[GPS|GPS]] || Position || GPS Sensor&lt;br /&gt;
|-&lt;br /&gt;
| [[Gyroscope|Gyroscope]] || Orientation|| Gyroscope Sensor&lt;br /&gt;
|-&lt;br /&gt;
| [[Object Proximity Positioning|Object Proximity]] || Position || none&lt;br /&gt;
|-&lt;br /&gt;
| [[Step Detector|Step Detector]] || Position || Step Detector Sensor&lt;br /&gt;
|-&lt;br /&gt;
| [[Routing-Graph Snapping|Routing-Graph Snapping]] || Position || none&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Besides the stated systems, the user can utilize the position of GEO-Objects by clicking the {{key press|Use Location}}  button in the [[UBIK Client Basics#Context Menu|Context Menu]]. Pose estimation is started once the device pose is requested by another part of the application (e.g. [[POI_View|POI View]], [[Map_View|Map View]], [[UBIK_Client_Basics#Content Browser|Content Browser]]). If the specific device does not possess the required sensor technology of an active pose estimation system, a notification is shown.&lt;br /&gt;
&lt;br /&gt;
== Working Principle ==&lt;br /&gt;
&lt;br /&gt;
Internally the Location Managers uses an Extended Kalman Filter to combine and filter pose estimation systems, based on their probabilistic error levels. Each Pose Estimation System is therefore associated with a variance level (squared standard deviation), describing the expected uncertainty. Precise systems, such as [[AR-Marker]], are associated with a lower variance than inaccurate systems such as [[GPS]]. &lt;br /&gt;
&lt;br /&gt;
The Kalman Filter keeps track of the current device pose (= best estimate) and the associated uncerctainty. The operation is subdivided into two stages: Prediction and Correction. &lt;br /&gt;
In the Prediction stage, the next pose (in time) is estimated using the [[Step Detector]] and [[Gyroscope]] Pose Estimation System. At this stage the uncertainty of the current device pose is increased, based on the elapsed time. If no [[Gyroscope]] or [[Step Detector]] is available only the uncertainty is increased. &lt;br /&gt;
As soon as a measurement from other Pose Estimation Systems is received, the current device pose is combined with the measured pose, based on their probabilistic error levels. The combined pose then serves again as the basement for the next prediction. &lt;br /&gt;
Consequently the Kalman Filter not only combines various Pose Estimation Systems based on their expected performance, but also accounts for the elapsed time between updates, reflecting the behavior of human walk.&lt;br /&gt;
&lt;br /&gt;
[[File:EKF.png|700 px|center|thumb|alt=Extended Kalman Filter|Extended Kalman Filter]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|Location Manager]]&lt;br /&gt;
[[Category:WinX|Location Manager]]&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
[[AR-Marker]] and [[Gyroscope]] are the most precise pose estimation systems. Thus it is adviced to activate them in any case. Especially in the proximity of POIs [[AR-Marker]] should be deployed, to provide a good AR-experience. Furthermore it is recommended to activate the [[Step Detector]] in scenarios, where the mobile device points into walking direction (i.e. the operator is not expected to walk sideward). &lt;br /&gt;
In indoor environments and environments with strong magnetic fields the [[Compass]] and [[GPS]] Pose Estimation Systems should be deactivated. [[Routing-Graph Snapping]] should only be activated and configured where the user is in the proximity of the graph (e.g. on corridors).&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|Location Manager]]&lt;br /&gt;
[[Category:WinX|Location Manager]]&lt;br /&gt;
&lt;br /&gt;
=WinX=&lt;br /&gt;
The Location Manager controls the different positioning services that are available for mobile devices.&lt;br /&gt;
&lt;br /&gt;
== PoseFusion ==&lt;br /&gt;
There is a toggle for using the Posefusion functionality.&lt;br /&gt;
&lt;br /&gt;
== Possible Positioning Modes ==&lt;br /&gt;
There are three different modes available for the Location Manager. The names and defined behaviors of the three modes are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:150px&amp;quot; | Mode !! style=&amp;quot;width:100px&amp;quot; | [[GPS]] !! style=&amp;quot;width:100px | [[Object Proximity Positioning|LLA]] !! style=&amp;quot;width:100px | [[Beacon Proximity]]&lt;br /&gt;
|-&lt;br /&gt;
| USE_ALL || class=&amp;quot;centeredCell&amp;quot; | {{bullet_full}} || class=&amp;quot;centeredCell&amp;quot; | {{bullet_full}} || class=&amp;quot;centeredCell&amp;quot; | {{bullet_empty}} &lt;br /&gt;
|-&lt;br /&gt;
| LLA_ONLY_MODE || class=&amp;quot;centeredCell&amp;quot; | {{bullet_empty}} || class=&amp;quot;centeredCell&amp;quot; | {{bullet_full}} || class=&amp;quot;centeredCell&amp;quot; | {{bullet_empty}} &lt;br /&gt;
|-&lt;br /&gt;
| BEACON_PROXIMITY_MODE || class=&amp;quot;centeredCell&amp;quot; | {{bullet_empty}} || class=&amp;quot;centeredCell&amp;quot; | {{bullet_full}} || class=&amp;quot;centeredCell&amp;quot; | {{bullet_full}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|Location Manager]]&lt;br /&gt;
[[Category:WinX|Location Manager]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Location_Manager&amp;diff=23605</id>
		<title>Location Manager</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Location_Manager&amp;diff=23605"/>
				<updated>2022-04-13T12:59:51Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* Possible Positioning Modes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Android=&lt;br /&gt;
&lt;br /&gt;
The Location Manager aims to calculate the device pose (position and orientation) as accurate as possible using various input sources. The performance of pose estimation can be characterised by the following measures:&lt;br /&gt;
&lt;br /&gt;
* Accuracy --&amp;gt; describes the average offset between real and estimated device pose&lt;br /&gt;
* Standard Deviation --&amp;gt; describes to which extend the estimated pose “jumps” around the real device pose&lt;br /&gt;
* Update Rate --&amp;gt; describes how often the device pose can be updated. &lt;br /&gt;
&lt;br /&gt;
To maximise the performance, the Location Manager combines and filters estimated poses from various Pose Estimation Systems based on their estimated error levels. Pose Estimation systems can be activated and deactivated using the [[Settings#AR_settings|Pose Estimation Systems Setting]]. Currently the following pose estimation systems are available:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | width = &amp;quot;50%&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Estimated Quantity !! Required Sensor Technology&lt;br /&gt;
|-&lt;br /&gt;
| [[AR-Marker Device Pose Estimation|AR-Marker]] || Position and Orientation || Camera&lt;br /&gt;
|-&lt;br /&gt;
| [[Beacon Proximity|Beacon Proximity]] || Position || Bluetooth Low Energy (Bluetooth 4.0)&lt;br /&gt;
|-&lt;br /&gt;
| [[Compass|Compass]] ||  Orientation || Accelerometer and Magnetometer&lt;br /&gt;
|-&lt;br /&gt;
| [[GPS|GPS]] || Position || GPS Sensor&lt;br /&gt;
|-&lt;br /&gt;
| [[Gyroscope|Gyroscope]] || Orientation|| Gyroscope Sensor&lt;br /&gt;
|-&lt;br /&gt;
| [[Object Proximity Positioning|Object Proximity]] || Position || none&lt;br /&gt;
|-&lt;br /&gt;
| [[Step Detector|Step Detector]] || Position || Step Detector Sensor&lt;br /&gt;
|-&lt;br /&gt;
| [[Routing-Graph Snapping|Routing-Graph Snapping]] || Position || none&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Besides the stated systems, the user can utilize the position of GEO-Objects by clicking the {{key press|Use Location}}  button in the [[UBIK Client Basics#Context Menu|Context Menu]]. Pose estimation is started once the device pose is requested by another part of the application (e.g. [[POI_View|POI View]], [[Map_View|Map View]], [[UBIK_Client_Basics#Content Browser|Content Browser]]). If the specific device does not possess the required sensor technology of an active pose estimation system, a notification is shown.&lt;br /&gt;
&lt;br /&gt;
== Working Principle ==&lt;br /&gt;
&lt;br /&gt;
Internally the Location Managers uses an Extended Kalman Filter to combine and filter pose estimation systems, based on their probabilistic error levels. Each Pose Estimation System is therefore associated with a variance level (squared standard deviation), describing the expected uncertainty. Precise systems, such as [[AR-Marker]], are associated with a lower variance than inaccurate systems such as [[GPS]]. &lt;br /&gt;
&lt;br /&gt;
The Kalman Filter keeps track of the current device pose (= best estimate) and the associated uncerctainty. The operation is subdivided into two stages: Prediction and Correction. &lt;br /&gt;
In the Prediction stage, the next pose (in time) is estimated using the [[Step Detector]] and [[Gyroscope]] Pose Estimation System. At this stage the uncertainty of the current device pose is increased, based on the elapsed time. If no [[Gyroscope]] or [[Step Detector]] is available only the uncertainty is increased. &lt;br /&gt;
As soon as a measurement from other Pose Estimation Systems is received, the current device pose is combined with the measured pose, based on their probabilistic error levels. The combined pose then serves again as the basement for the next prediction. &lt;br /&gt;
Consequently the Kalman Filter not only combines various Pose Estimation Systems based on their expected performance, but also accounts for the elapsed time between updates, reflecting the behavior of human walk.&lt;br /&gt;
&lt;br /&gt;
[[File:EKF.png|700 px|center|thumb|alt=Extended Kalman Filter|Extended Kalman Filter]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|Location Manager]]&lt;br /&gt;
[[Category:WinX|Location Manager]]&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
[[AR-Marker]] and [[Gyroscope]] are the most precise pose estimation systems. Thus it is adviced to activate them in any case. Especially in the proximity of POIs [[AR-Marker]] should be deployed, to provide a good AR-experience. Furthermore it is recommended to activate the [[Step Detector]] in scenarios, where the mobile device points into walking direction (i.e. the operator is not expected to walk sideward). &lt;br /&gt;
In indoor environments and environments with strong magnetic fields the [[Compass]] and [[GPS]] Pose Estimation Systems should be deactivated. [[Routing-Graph Snapping]] should only be activated and configured where the user is in the proximity of the graph (e.g. on corridors).&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|Location Manager]]&lt;br /&gt;
[[Category:WinX|Location Manager]]&lt;br /&gt;
&lt;br /&gt;
=WinX=&lt;br /&gt;
The Location Manager controlls the different positioning services that are available for mobile devices.&lt;br /&gt;
&lt;br /&gt;
== Possible Positioning Modes ==&lt;br /&gt;
There are three different modes available for the Location Manager. Additionally there is a Toggle for using the Posefusion functionality.&lt;br /&gt;
The names and defined behaviors of the three modes are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:150px&amp;quot; | Mode !! style=&amp;quot;width:100px&amp;quot; | [[GPS]] !! style=&amp;quot;width:100px | [[Object Proximity Positioning|LLA]] !! style=&amp;quot;width:100px | [[Beacon Proximity]]&lt;br /&gt;
|-&lt;br /&gt;
| USE_ALL || class=&amp;quot;centeredCell&amp;quot; | {{bullet_full}} || class=&amp;quot;centeredCell&amp;quot; | {{bullet_full}} || class=&amp;quot;centeredCell&amp;quot; | {{bullet_empty}} &lt;br /&gt;
|-&lt;br /&gt;
| LLA_ONLY_MODE || class=&amp;quot;centeredCell&amp;quot; | {{bullet_empty}} || class=&amp;quot;centeredCell&amp;quot; | {{bullet_full}} || class=&amp;quot;centeredCell&amp;quot; | {{bullet_empty}} &lt;br /&gt;
|-&lt;br /&gt;
| BEACON_PROXIMITY_MODE || class=&amp;quot;centeredCell&amp;quot; | {{bullet_empty}} || class=&amp;quot;centeredCell&amp;quot; | {{bullet_full}} || class=&amp;quot;centeredCell&amp;quot; | {{bullet_full}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|Location Manager]]&lt;br /&gt;
[[Category:WinX|Location Manager]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.1_(Xamarin)&amp;diff=23527</id>
		<title>Version 4.1 (Xamarin)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.1_(Xamarin)&amp;diff=23527"/>
				<updated>2022-02-21T15:23:20Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* 4.0.? on 2021-??-?? {{key press|App Center}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&lt;br /&gt;
== Beta ==&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
=== 4.0.? on 2022-??-?? {{key press|App Center}} ===&lt;br /&gt;
* The app's default profile is now only generated during app startup when no other profiles are detected.&lt;br /&gt;
* Xamarin Android now supports [[Managed_App_Configuration|managed app configuration]] for rolling out up to 9 Ubik profiles in an enterprise environment.&lt;br /&gt;
* Some security related improvements.&lt;br /&gt;
** The app now informs the web service to terminate the user session upon logout or app closing.&lt;br /&gt;
** The app no longer allows self signed server certificates.&lt;br /&gt;
* The app's entire login page is now customizable.&lt;br /&gt;
** As a result, the old feature which allows customizers to configure the background image of the login page (bg_portrait.png/bg_landscape.png) is removed. Because it only worked for Xamarin.UWP and can now be done with regular XAML customizing.&lt;br /&gt;
* Fixed an issue where unnecessary messages are logged. (&amp;quot;Message is null&amp;quot;)&lt;br /&gt;
* UBIK clients are now able to log all webservice communication related activities (in UBIKWebserviceDebug.log) for better trouble shooting. It can also be turned off using the EnableSyncLogging setting in the profiles.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Version 4.0 Xamarin|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.0 Xamarin]]&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= XAML Notes =&lt;br /&gt;
&lt;br /&gt;
== XAML changes ==&lt;br /&gt;
Since there has been a major UI redesign in this version, quite a lot of changes in XAML code (especially bindings) are involved. We have striven to maintain backward compatibility, but some changes either are simply unavoidable or their long term benefits outweigh the efforts required this one time.&lt;br /&gt;
&lt;br /&gt;
=== Converters ===&lt;br /&gt;
* Under namespace UBIK.CPL.Converters, SelectiveItemToValueConverter is renamed as PropertyValueToSelectiveItemConverter to properly reflect what it does.&lt;br /&gt;
* Under namespace UBIK.CPL.Converters, a new &amp;quot;StringToDateTimeTypesConverter&amp;quot; was added. It should be used when binding to a Date/Time Property on a PropertyViewModel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Version 4.0 Xamarin|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.0 Xamarin]]&lt;br /&gt;
&lt;br /&gt;
=== UBIKContentArea ===&lt;br /&gt;
* Changed from &amp;quot;Properties.Items&amp;quot; to &amp;quot;Properties.VisibleItems&amp;quot; in bindings because Items/AllItems now also include those system/invisible ones that users are not supposed to see.&lt;br /&gt;
&lt;br /&gt;
=== UBIKThemes ===&lt;br /&gt;
* Removed &amp;quot;Content.&amp;quot;, &amp;quot;OwnerModel.&amp;quot; from bindings in DateTemplate &amp;quot;UBIKPropertyItem&amp;quot;.&lt;br /&gt;
* &amp;quot;SetValueCommand&amp;quot;  is no longer available and replaced with &amp;quot;SetPropertyValueCommand&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Version 4.0 Xamarin|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.0 Xamarin]]&lt;br /&gt;
&lt;br /&gt;
=== UBIKEditNA ===&lt;br /&gt;
* Prefixed bindings &amp;quot;EnableNAOption&amp;quot; &amp;amp; &amp;quot;NotApplicable&amp;quot; with &amp;quot;PropertyViewModel.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Editor related templates ===&lt;br /&gt;
{{Hint|The changes are quite extensive and, therefore, we recommended you taking the default templates from the app and re-customize them from there.}}&lt;br /&gt;
&lt;br /&gt;
The affected list of templates include: UBIKEditDateTime, UBIKEditDouble, UBIKEditInt, UBIKEditGuid, UBIKEditGeo, UBIKEditBool, UBIKEditString.&lt;br /&gt;
* Changed from &amp;quot;PropertyItem&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings;&lt;br /&gt;
* Prefixed bindings &amp;quot;EnableNAOption&amp;quot;, &amp;quot;NotApplicable&amp;quot;, &amp;quot;Unit&amp;quot; &amp;amp; &amp;quot;ShowComboBox&amp;quot; with &amp;quot;PropertyViewModel.&amp;quot;;&lt;br /&gt;
* Changed from &amp;quot;PropertyValue&amp;quot; to &amp;quot;PropertyViewModel.ValueItem.PropertyValue&amp;quot; in bindings;&lt;br /&gt;
* Prefixed binding &amp;quot;FilterQueryResults.Items&amp;quot; with &amp;quot;PropertyViewModel.&amp;quot;; (UBIKEditGuid)&lt;br /&gt;
* Changed from &amp;quot;ViewGuidObjectCommand&amp;quot; to &amp;quot;NavigateToGuidCommand&amp;quot;.  (UBIKEditGuid)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.0 Xamarin]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.0_(WinX)&amp;diff=23526</id>
		<title>Version 4.0 (WinX)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.0_(WinX)&amp;diff=23526"/>
				<updated>2022-02-21T15:21:00Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* 4.0.? on 2021-??-?? {{key press|DevOps}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&lt;br /&gt;
== Beta ==&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
=== 4.0.? on 2022-??-?? {{key press|DevOps}} ===&lt;br /&gt;
* The app's default profile is now only generated during app startup when no other profiles are detected.&lt;br /&gt;
* Added a button in the developer mode to unpack and get all default XAML resources.&lt;br /&gt;
* Some security related improvements.&lt;br /&gt;
** The app now informs the web service to terminate the user session upon logout or app closing.&lt;br /&gt;
** The app no longer allows self signed server certificates.&lt;br /&gt;
* Moved some properties from GlobalStatusBarViewModel to AppStatusViewModel.&lt;br /&gt;
* The develop mode now also applies to the open dialog.&lt;br /&gt;
* Fixed an issue where the app can get into an invalid state if a user manages to browse to e.g. the root object page during a logout process.&lt;br /&gt;
* Improved the app performance when deleting large amount of data (which happens when e.g. evaluating online queries).&lt;br /&gt;
* Most features in the old app's top &amp;amp; bottom bars can now be used in customized UI. See [[Version_4.0_(WinX)#App_bars|XAML Notes - App bars]].&lt;br /&gt;
* Fixed an issue where unnecessary messages are logged. (&amp;quot;Message is null&amp;quot;)&lt;br /&gt;
* UBIK clients are now able to log all webservice communication related activities (in UBIKWebserviceDebug.log) for better trouble shooting. It can also be turned off using the EnableSyncLogging setting in the profiles. &lt;br /&gt;
* Fixed some misbehaviors in the signature editor. For example, the signing isn't properly disabled after the countdown ends when a stroke is not yet finished.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.0 (WinX)]]&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= XAML Notes =&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
It is highly recommended to start new UI customizings based on the default resources in {{UBIK}} 4. [[Developer_Mode#Features|Here]] is how you can get them from the app. Some major changes are listed below, please see every item for detailed information and whether your existing customizings will still work.&lt;br /&gt;
&lt;br /&gt;
== Obsolete resources ==&lt;br /&gt;
Some of the UI resources from the older versions no longer exist or are not used anymore.&lt;br /&gt;
&lt;br /&gt;
=== Converters ===&lt;br /&gt;
* PropertyItemToValueConverter is removed since it was not used at all. (This should not be used in any XAML customizings, If it is, please consider using alternatives or contact us.)&lt;br /&gt;
* StringToDateTimeTypesConverter was added. It should be used when Binding to a Date/Time property on a PropertyViewModel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.0 (WinX)]]&lt;br /&gt;
&lt;br /&gt;
=== App bars ===&lt;br /&gt;
These are the top and bottom bars that you bring out by mouse right clicks. The various buttons in them are now included in other parts of the new UI, meaning the bars are now unnecessary and no longer displayed. The custom templates used in these bars include the following.&lt;br /&gt;
* UBIKChildAction;&lt;br /&gt;
* UBIKPageAction.&lt;br /&gt;
For those who still want to use the old UI with these bars, [[Settings#General|UICompatibilityLevel]] should be set to lower than 400 in the profile.&lt;br /&gt;
&lt;br /&gt;
=== Child templates in UBIKGlobalStatusBar and UBIKGlobalBottomBar ===&lt;br /&gt;
The UBIKGlobalStatusBar and the UBIKGlobalBottomBar are redesigned and no longer use the following child templates.&lt;br /&gt;
* UBIKTopLeft;&lt;br /&gt;
* UBIKTopCenter;&lt;br /&gt;
* UBIKTopRight;&lt;br /&gt;
* UBIKBottomLeft;&lt;br /&gt;
* UBIKBottomRight.&lt;br /&gt;
This means such existing child templates in your project setups will not have any effect in {{UBIK}} 4, unless you still have the two parent/container templates customized where they are explicitly referenced.&lt;br /&gt;
&lt;br /&gt;
== XAML changes ==&lt;br /&gt;
Since there has been a major UI redesign in this version, quite a lot of changes in XAML code (especially bindings) are involved. We have striven to maintain backward compatibility, but some changes either are simply unavoidable or their long term benefits outweigh the efforts required this one time.&lt;br /&gt;
&lt;br /&gt;
=== UBIKChildPageAction ===&lt;br /&gt;
* The Visibility of &amp;lt;AppBarButton x:Name=&amp;quot;SaveButton&amp;quot; ... /&amp;gt; now adjusts according to setting &amp;quot;Content -&amp;gt; enable auto save mode&amp;quot;. Nothing will be broken if your existing XAMLs are not updated. However, the saving behavior might not match what's described in [[Settings#Content|Content -&amp;gt; AutoSaveMode]].&lt;br /&gt;
&lt;br /&gt;
=== UBIKPropertyArea/UBIKContentArea ===&lt;br /&gt;
* The ItemsSource and property count now use the result of an [[EvalExpression]]. Mass editing will no longer work or the count will be incorrect if not updated;&lt;br /&gt;
* Changed from &amp;quot;Properties.Items&amp;quot; to &amp;quot;Properties.VisibleItems&amp;quot; in bindings because Items/AllItems now also include those system/invisible ones that users are not supposed to see.&lt;br /&gt;
&lt;br /&gt;
=== UBIKPropertyItem/UBIKPriorityPropertyItem ===&lt;br /&gt;
* PriorityPropertyClickedCommand/PriorityPropertyRightClickedCommand are deleted since they are the same as PropertyClickedCommand/PropertyRightClickedCommand. You should use the latter instead;&lt;br /&gt;
* Removed &amp;quot;Content.&amp;quot;, &amp;quot;OwnerModel.&amp;quot; from bindings.&lt;br /&gt;
&lt;br /&gt;
=== UBIKGlobalStatusBar ===&lt;br /&gt;
Some properties are moved from GlobalStatusBarViewModel to AppStatusViewModel.&lt;br /&gt;
* &amp;quot;{Binding ProgressIndicator, ...}&amp;quot; is changed to &amp;quot;{Binding AppStatus.ProgressIndicator, ...}&amp;quot;&lt;br /&gt;
* &amp;quot;{Binding LoginState, ...}&amp;quot; is changed to &amp;quot;{Binding AppStatus.LoginState, ...}&amp;quot;&lt;br /&gt;
* &amp;quot;{Binding WritingToDB, ....]&amp;quot; is changed to &amp;quot;{Binding AppStatus.WritingToDB, ...}&amp;quot;&lt;br /&gt;
* &amp;quot;{Binding TaskCount, ....]&amp;quot; is changed to &amp;quot;{Binding AppStatus.TaskCount, ...}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== UBIKPropertyValueRecordDialog ===&lt;br /&gt;
* Changed from &amp;quot;PropertyItem&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings.&lt;br /&gt;
&lt;br /&gt;
=== Editor related templates ===&lt;br /&gt;
{{Hint|The changes are quite extensive and, therefore, we recommended you taking the default templates from the app and re-customize them from there.}}&lt;br /&gt;
&lt;br /&gt;
First of all for UBIKEditDateTime, UBIKEditDouble, UBIKEditInt, UBIKEditGuid, UBIKEditChart, UBIKEditGeo, UBIKEditBool, UBIKEditString.&lt;br /&gt;
* Changed from &amp;quot;EditDialogViewModel.PropertyItem&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings;&lt;br /&gt;
* Changed from &amp;quot;EditDialogViewModel&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings;&lt;br /&gt;
* Changed from &amp;quot;EditDialogViewModel.DeletePressedCommand&amp;quot; to &amp;quot;PropertyViewModel.DeleteValueCommand&amp;quot; in a binding; (UBIKEditGuid)&lt;br /&gt;
* Prefixed &amp;quot;EditDialogViewModel&amp;quot; with &amp;quot;PropertyViewModel.&amp;quot; in the binding of &amp;lt;Button x:Name=&amp;quot;TeachInButton&amp;quot; /&amp;gt;; (UBIKEditGeo)&lt;br /&gt;
* UBIKEditString was renamed from UBIKEdit.&lt;br /&gt;
* UBIKEditDateTime now needs the StringToDateTimeTypesConverter when Binding to a value on a PropertyViewModel. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then for UBIKEditDialogButtons, UBIKEditDialogHeader, UBIKEditDialogNACheck.&lt;br /&gt;
* Changed from &amp;quot;PropertyItem.Content.DisplayStrings&amp;quot; to &amp;quot;PropertyViewModel.OwnerObject.DisplayStrings&amp;quot; in bindings; (UBIKEditDialogHeader)&lt;br /&gt;
* Changed from &amp;quot;PropertyItem&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings;&lt;br /&gt;
* Prefixed bindings &amp;quot;EnableNAOption&amp;quot;, &amp;quot;NotApplicable&amp;quot;, &amp;quot;ValueDefinitions&amp;quot;, &amp;quot;ValueDefinition&amp;quot;, &amp;quot;EnableMultiValueEditing&amp;quot; &amp;amp; &amp;quot;CanExecuteConfirmEditCommand&amp;quot; with &amp;quot;PropertyViewModel.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.0 (WinX)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Converters_In_Mobile&amp;diff=23525</id>
		<title>Converters In Mobile</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Converters_In_Mobile&amp;diff=23525"/>
				<updated>2022-02-21T12:26:13Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* List of Available Converters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''See also: [[XAML#Converters|Converters in UWP/WinX]]''&lt;br /&gt;
&lt;br /&gt;
'''Converters''' are used to prepare application data to format a UI defined by a XAML markup. These converters make it possible to show elements only when specific conditions (like data being available) are met. This allows the creation of a good UI with XAML code only, improving code readability while also decreasing code complexity.&lt;br /&gt;
&lt;br /&gt;
This page explains how to properly use converters for customizing the UBIK Xamarin User Interface. Furthermore, all available converters are listed to provide a good reference.&lt;br /&gt;
&lt;br /&gt;
= Definition =&lt;br /&gt;
In Xamarin, before converters can be used, they need to be defined in the page's ''Resources'' tag. Make sure to include the &amp;lt;code&amp;gt;UBIK.CPL.Converters&amp;lt;/code&amp;gt; namespace in the namespace definitions!&lt;br /&gt;
The following example shows how the &amp;lt;code&amp;gt;NullToBoolConverter&amp;lt;/code&amp;gt; can be defined:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:converters=&amp;quot;clr-namespace:UBIK.CPL.Converters;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;converters:NullToBoolConverter x:Key=&amp;quot;NullToBool&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Cuztomizing --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The key ''NullToBool'' makes this converter accessible from the customizing in this page.&lt;br /&gt;
== Definition With Properties ==&lt;br /&gt;
In the following example, which is the same example from above, the '''StringFormatConverter''' will be additionally defined. To add more formatting possibilities, it has two extra properties, which need to be prefilled during initialization. Henceforth, these properties can be prefilled with static values or with static references.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:converters=&amp;quot;clr-namespace:UBIK.CPL.Converters;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;converters:NullToBoolConverter x:Key=&amp;quot;NullToBool&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;converters:StringFormatConverter x:Key=&amp;quot;Formatter&amp;quot; Parameter1=&amp;quot;5&amp;quot; Parameter2=&amp;quot;{Binding Children.Items.Count}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Cuztomizing --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Whereever this converter is used within the file it was defined in, ''Formatter'' will always have its ''Parameter1'' set to ''5'' and its ''Parameter2'' to the number of children of the currently viewed UBIK object. If this behavior is not intended, consider defining another ''StringFormatConverter'' with a '''different Key''' in the same way as shown above.&amp;lt;br/&amp;gt;&lt;br /&gt;
See below to find out how to use this converter!&lt;br /&gt;
= Usage =&lt;br /&gt;
A converter can only be used in conjunction with a &amp;lt;code&amp;gt;{Binding}&amp;lt;/code&amp;gt;. The following is an easy example, showing how the ''NullToBool'' converter, defined above, can be used.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;My Text&amp;quot; IsVisible=&amp;quot;{Binding MyBindableProperty, Converter={StaticResource NullToBool}}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If '''MyBindableProperty''' is ''null'' or an empty string, the converter will return '''true''', making the Label visible!&lt;br /&gt;
== Parameter ==&lt;br /&gt;
Some converters accept a '''ConverterParameter''', that passes additional information. Closely read the description of the available converters to find out which accept or even require a parameter to work properly. In Ubik, some converters accept a string parameter, consisting of multiple individual parameters separated by &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
An example of this behavior is the '''ContainsToBoolConverter''', which checks if the current value is contained within a collection of values (passed as the ''parameter''):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;My Text&amp;quot; IsVisible=&amp;quot;{Binding MyValue, Converter={StaticResource ContainsToBool}, ConverterParameter=1|2|3|4|5|6|7|8|9}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The label will only be visible if the ''MyValue'' property (which is expected to parse as an Integer in this example) is one of the values of the parameter.&amp;lt;br/&amp;gt;&lt;br /&gt;
Again, to get the converter working, don't forget to define it in the page's resources!&lt;br /&gt;
&lt;br /&gt;
== FallbackValue ==&lt;br /&gt;
In some rare cases, a converter might not return anything desired (like ''null'') if some condition doesn't work out as it should (e.g. ''value'' is ''null''). To still be able to get a usable return value, it's possible to define a '''FallbackValue'''.&lt;br /&gt;
&lt;br /&gt;
== Example Usage of StringFormatConverter ==&lt;br /&gt;
This converter can take up to two additional parameters during definition. Please see [[#Definition With Properties|Definition With Properties]] for more information!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;{Binding MyValue, Converter={StaticResource Formatter}, ConverterParameter=The Value of my value is \{0\}\, compared to \{1\} and \{2\}!}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It's important to note that special characters, like &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;,&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, need to be escaped using a &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, else the expression will be wrongly interpreted (and nothing happens)!&lt;br /&gt;
&lt;br /&gt;
The text of the '''ConverterParameter''' will be analyzed, and any occurrance (including duplicates) of &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{1}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{2}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; replaced with the '''binding value''', '''Formatter.Parameter1''' and '''Formatter.Parameter2''' respectively!&lt;br /&gt;
&lt;br /&gt;
Make sure to note, that Xamarin Forms has a native '''[https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/string-formatting StringFormat]''' option as well, that is probably way faster than using a converter for it. Furthermore, it supports formatting options!&lt;br /&gt;
&lt;br /&gt;
= Data Source =&lt;br /&gt;
Although technically not a converter, the '''SfDataSourceExt''' control is currently on the way of replacing the '''SfDataSourceConverter''', due to improved performance.&lt;br /&gt;
The usage is pretty simple: Similar to the converters, it needs to be defined in the '''Page Resources'''. Then, a '''Key''' and '''Expression''', as well as an '''ItemsSource''' have to be defined. Last, but not least, the the converter can be used within the '''ItemsSource''' property of a Syncfusion '''SfListView'''. See the following example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
             &amp;lt;controls:SfDataSourceExt&lt;br /&gt;
                x:Key=&amp;quot;MyDataSource&amp;quot;&lt;br /&gt;
                ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot;&lt;br /&gt;
                Expression=&amp;quot;Item.Content.MetaUID.ToString().ToLower()==&amp;amp;quot;85a50533-3817-4a0b-84cd-615b48b62565&amp;amp;quot; &amp;amp;amp;&amp;amp;amp; Item[&amp;amp;quot;ORGA_STATUS&amp;amp;quot;]!=100&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    &amp;lt;sync:SfListView&lt;br /&gt;
           x:Name=&amp;quot;ListView1&amp;quot;&lt;br /&gt;
           AllowSwiping=&amp;quot;True&amp;quot;&lt;br /&gt;
           ItemSize=&amp;quot;60&amp;quot;&lt;br /&gt;
           ItemTemplate=&amp;quot;{StaticResource ChildTemplateSelector}&amp;quot;&lt;br /&gt;
           ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource MyDataSource}}&amp;quot;&lt;br /&gt;
           LeftSwipeTemplate=&amp;quot;{StaticResource SwipeLeftTemplateSelector}&amp;quot;&lt;br /&gt;
           RightSwipeTemplate=&amp;quot;{StaticResource SwipeRightTemplateSelector}&amp;quot;&lt;br /&gt;
           SelectionMode=&amp;quot;None&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Thanks to the given expression, filtering is applied once the data source is evaluated. It's important to have [https://www.advancedinstaller.com/user-guide/xml-escaped-chars.html XML special characters] correctly escaped, like the example shows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= List of Available Converters =&lt;br /&gt;
The following list contains all currently available converters for UBIK Xamarin customizing. &lt;br /&gt;
&lt;br /&gt;
'''Two-way''' converters can be used with two-way bindings, e.g. a text-box displaying an editable value. If the value updates in the model, the text-box text changes. If the user edits the value, the value in the model behind also gets updated.&lt;br /&gt;
As a clarification, '''Value''' refers to the '''Binding Value''', and '''parameter''' to the '''ConverterParameter'''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Converter !! 2-Way !! Output Type || Input Type || Parameter Type || Description &lt;br /&gt;
|-&lt;br /&gt;
| BooleanConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Boolean, String || || &lt;br /&gt;
Interprets a '''boolean value''' or a '''String value''' and returns it. If the value cannot be interpreted, ''false'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| BooleanInvertConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Boolean, String || || &lt;br /&gt;
Interprets a '''boolean value''' or a '''String value''' and converts it into its '''inverted value'''. If the value cannot be interpreted, ''false'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| BooleanToFontAttributeConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || FontAttribute || Boolean || || &lt;br /&gt;
Converts a '''boolean''' into a '''[https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.fontattributes?view=xamarin-forms font attribute]''' value. In detail, if the value is ''true'', the parameter is interpreted (''Bold'', ''Italic'', ''None'') and returned. The default returned font-attribute is ''None''.&lt;br /&gt;
|- &lt;br /&gt;
| ByteToImageSourceValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ImageSource || Byte[ ],&amp;lt;br/&amp;gt;Byte Stream || || &lt;br /&gt;
Converts a '''byte stream''' value into an '''image source'''.&lt;br /&gt;
|- &lt;br /&gt;
| ChildAreaTemplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Child&amp;lt;wbr/&amp;gt;Area&amp;lt;wbr/&amp;gt;Template || Content&amp;lt;wbr/&amp;gt;ViewModel || || &lt;br /&gt;
Returns a '''ChildAreaTemplate''' from a '''Content&amp;lt;wbr/&amp;gt;ViewModel''' or ''null'' if the ViewModel cannot be interpreted.&lt;br /&gt;
|- &lt;br /&gt;
| ChildItem&amp;lt;wbr/&amp;gt;SelectionMode&amp;lt;wbr/&amp;gt;To&amp;lt;wbr/&amp;gt;SfListView&amp;lt;wbr/&amp;gt;SelectionMode&amp;lt;wbr/&amp;gt;Converter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || [https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.SfListView~SelectionMode.html ListView&amp;lt;wbr/&amp;gt;SelectionMode] || ChildItem&amp;lt;wbr/&amp;gt;SelectionMode || || &lt;br /&gt;
Converts a '''ChildItem&amp;lt;wbr/&amp;gt;SelectionMode''' to a Syncfusion '''[https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.SfListView~SelectionMode.html ListView&amp;lt;wbr/&amp;gt;SelectionMode]'''. Default is &amp;quot;Single&amp;quot;.&lt;br /&gt;
|- &lt;br /&gt;
| ClassificationToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || ContentViewModel || || &lt;br /&gt;
Returns a '''boolean''' indicating whether the given '''ContentViewModel''' is successfully classified.&lt;br /&gt;
|- &lt;br /&gt;
| ContainsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;Object || || &lt;br /&gt;
Checks if the delivered value is '''contained''' within a collection of values (delivered in the parameter, seperated with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;). If the value is contained, ''true'' will be returned, else ''false''. The functionality is similar to the ''ContainsToVisibilityConverter'' in the WinX project.&lt;br /&gt;
|- &lt;br /&gt;
| ContainsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;Object || || &lt;br /&gt;
Same as the ''ContainsToBoolConverter'', but with '''inverted output'''.&lt;br /&gt;
|- &lt;br /&gt;
| ContentAreaTeamplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || UBIKContentArea || ContentViewModel || || This converter is '''not yet finished''' and just returns the ''UBIKContentArea'' if the value is a ''ContentViewModel''.&lt;br /&gt;
|- &lt;br /&gt;
| StringToDateTimeTypesConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓  || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime], [https://docs.microsoft.com/en-us/dotnet/api/system.timespan TimeSpan] || String || || &lt;br /&gt;
Converts a String to the correct DateType, which can be either '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' or '''[https://docs.microsoft.com/en-us/dotnet/api/system.timespan TimeSpan]'''. If the value cannot be interpreted, the unchanged String value is returned. The Converter can also be used to convert DateTime or TimeSpan into a string. The Format will be determined by the current culture.&lt;br /&gt;
|- &lt;br /&gt;
| DateTimeOffsetToDateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime] || [https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset DateTimeOffset] || || &lt;br /&gt;
Converts a '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset DateTimeOffset]''' to the correct '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''', applied to the current date and time. If the value cannot be interpreted, a new ''DateTime'', generated from the device's current time (&amp;lt;code&amp;gt;DateTime.Now&amp;lt;/code&amp;gt;) is returned.&lt;br /&gt;
|- &lt;br /&gt;
| DateTimeToFromNowStringConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime] || || &lt;br /&gt;
Returns a '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' into a human-readable and easily understandable ''string message'' (the last applying one will be taken):&lt;br /&gt;
* Less than 5 minutes in the past: ''Just now''&lt;br /&gt;
* Less than 10 minutes in the past: ''A few minutes ago''&lt;br /&gt;
* Less than 1 hour in the past: ''An hour ago''&lt;br /&gt;
* Less than 23 Hours in the past: ''Some hours ago''&lt;br /&gt;
* Less than 1 day in the past: ''Yesterday''&lt;br /&gt;
* More than 1 day in the past: The ''DateTime'' value formatted according to the device's localization rules.&lt;br /&gt;
* Not interpretable: ''???''&lt;br /&gt;
|- &lt;br /&gt;
| DebugConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Object || Object || || &lt;br /&gt;
A converter returning the given value for '''debug reasons'''.&lt;br /&gt;
|- &lt;br /&gt;
| DistanceToStringConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Double || || &lt;br /&gt;
Returns the given value interpreted as '''length'''. Values are returned in kilometers with two comma digits (e.g. 2.84km), values smaller than 1km are returned as meters and ''NaN'' will be returned as ''infinity''. If the value cannot be interpreted, an empty string will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| EqualityToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object,&amp;lt;br/&amp;gt;String || Object,&amp;lt;br/&amp;gt;String || &lt;br /&gt;
Returns ''true'' if the given value and parameter are '''equal to each other''', ''false'' otherwise.&lt;br /&gt;
|- &lt;br /&gt;
| EqualityToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object,&amp;lt;br/&amp;gt;String || Object,&amp;lt;br/&amp;gt;String || &lt;br /&gt;
Returns ''true'' if the given value and parameter are '''not equal to each other''', ''false'' otherwise.&lt;br /&gt;
|- &lt;br /&gt;
| SelectionChangedEventArgsConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || [https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.selectionchangedeventargs List&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs] || [https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs.html Item&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs] || || &lt;br /&gt;
Converts an Syncfusion '''[https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs.html Item&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs]''' to a '''[https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.selectionchangedeventargs List&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs]'''. &amp;lt;br/&amp;gt;The use-case of this converter is highly specific.&lt;br /&gt;
|- &lt;br /&gt;
| FilterCriterionToValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || String || FilterCriterion || || &lt;br /&gt;
Converts a [[Property_Based_Content_Filters|'''FilterCriterion''']] to its value. The functionality is similar to UWP's FilterCriterionToValueConverter.&lt;br /&gt;
|- &lt;br /&gt;
| GuidPropertyValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || String || Guid || Binding, where source is ContentViewModel || &lt;br /&gt;
Returns the '''first item''' of the parameter's ''Source-ViewModel'' that '''matches the given GUID''' value. If none is found, ''null'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| IntToColorConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Color || Integer || || &lt;br /&gt;
Converts an ARGB '''integer''' value to a '''color'''. If the value cannot be interpreted, the converter tries to parse the parameter as a ''color'' to return it. If everything fails, ''transparent'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| ItemCountToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Integer || Integer || &lt;br /&gt;
This converter has a '''property''' to set the '''boolean return value''', called ''LesserOrEqualReturnValue''. This property-value will be returned if the given value is '''smaller than or equal to''' the threshold (parameter, defaults to 0). If the value is '''bigger than''' the threshold, the '''inverted''' ''LesserOrEqualReturnValue'' will be returned.&amp;lt;br/&amp;gt;&lt;br /&gt;
In any other case (like the value cannot be interpreted), ''false'' is returned, so it's a good idea to set the converter's property in a way that the return is only ''true'' if you need it.&lt;br /&gt;
|- &lt;br /&gt;
| ItemCountToOverflowConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Integer || Integer || Creates a '''human-readable text''' indicating '''how many items are available'''. The value will be interpreted as the '''total item count''' and the parameter as '''overflow threshold''' (defaults to 99). &amp;lt;br/&amp;gt;If there are more items than the overflow, the overflow value with a + sign will be returned (e.g. 99+). If not, the value itself will be returned. If everything fails, ''null'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| NullToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Object,&amp;lt;br/&amp;gt;String|| || &lt;br /&gt;
''Null'' or an '''empty string''' value get converted to ''true'', and everything else to ''false''.&lt;br /&gt;
|- &lt;br /&gt;
| NullToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Object,&amp;lt;br/&amp;gt;String || || &lt;br /&gt;
''Null'' or an '''empty string''' value get converted to ''false'', and everything else to ''true''.&lt;br /&gt;
|- &lt;br /&gt;
| PathToImageSourceValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Image Source || String || || &lt;br /&gt;
Reads the '''path''' provided as parameter and creates an '''image source''' from it.&lt;br /&gt;
|- &lt;br /&gt;
| PercentageToProgressConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Double || Integer,&amp;lt;br/&amp;gt;Double || || &lt;br /&gt;
The '''numeric value'''  (int or double), interpreted as '''percentage from 0 to 100''', get converted to a '''progress level'''  (0 to 1). Values outside this range will be contained.&lt;br /&gt;
|- &lt;br /&gt;
| PropertyNameExistsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean (Nullable) || ContentViewModel,&amp;lt;br/&amp;gt;IContent || || &lt;br /&gt;
Converts a property to a '''boolean''' based on its '''existence'''. If it exists, ''true'' will be returned, else ''false'' or ''null'' (if something couldn't be properly interpreted).&lt;br /&gt;
|- &lt;br /&gt;
| PropertyNameExistsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean (Nullable) || ContentViewModel,&amp;lt;br/&amp;gt;IContent || || &lt;br /&gt;
Converts a property to a '''boolean''' based on its '''existence'''. If it exists, ''false'' will be returned, else ''true'' or ''null'' (if something couldn't be properly interpreted).&lt;br /&gt;
|- &lt;br /&gt;
| RootAreaTemplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ContentView || Object || || &lt;br /&gt;
If the provided value is '''not null''', the '''UBIKRootArea template''' will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| SelectiveItemToValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean,&amp;lt;br/&amp;gt;String,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;Double,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;FileReferenceData,&amp;lt;br/&amp;gt;GeoData,&amp;lt;br/&amp;gt;Object || Boolean,&amp;lt;br/&amp;gt;String,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;Double,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;FileReferenceData,&amp;lt;br/&amp;gt;GeoData,&amp;lt;br/&amp;gt;Object || Binding, where source is ContentViewModel || &lt;br /&gt;
Converts a '''item''' of a '''selective list''' to its value. If none is found, the passed ''value'' will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| SelectiveListToItemsConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || List of PropertyItems  || IPropertyItem || || &lt;br /&gt;
Returns all items from a selective list.&lt;br /&gt;
|- &lt;br /&gt;
| SfDataSourceConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || DataSource (for ListView) || Double || String (Expression) || &lt;br /&gt;
It's an advanced converter used for '''loading items''' and '''applying filters''' on it. It replaces to ''CollectionToViewConverter'' from the WinX.UWP project. The data source can be directly used with a ''[https://help.syncfusion.com/xamarin/sflistview/overview SfListView]''.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''This converter is obsolete!'''&amp;lt;br/&amp;gt;Use '''SfDataSourceExt''' (see [[#Data Source|Data Source]]) instead!&lt;br /&gt;
|- &lt;br /&gt;
| StringContainsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String || String || &lt;br /&gt;
Returns a '''boolean''' indicating whether the parameter string is included in the value string.&lt;br /&gt;
|- &lt;br /&gt;
| StringContainsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String || String || &lt;br /&gt;
Same as the ''StringContainsToBoolConverter'' but with '''inverted output'''.&lt;br /&gt;
|- &lt;br /&gt;
| StringFormatConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Object || String || Allows the creation of a '''nicely formatted ''string'' message''', similar to [https://docs.microsoft.com/en-us/dotnet/api/system.string.format C#'s String.Format method].&amp;lt;br/&amp;gt;The value will be interpreted as the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; element, and the parameter is the template string (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;The total count is: {0}!&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Up to two additional parameters, named ''Parameter1'' and ''Parameter2'', can be defined at the converter declaration. Adding formatting options to the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; notation is not possible.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Attention''', using the native '''[https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/string-formatting StringFormat]''' option is not only faster, but it also offers more customizability of the value!&amp;lt;br/&amp;gt;&lt;br /&gt;
You might still want to use the ''StringFormatConverter'' in rare cases, though!&lt;br /&gt;
|- &lt;br /&gt;
| ToStringFormatConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Double,&amp;lt;br/&amp;gt;Float,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;String || String || Converts '''primitives''' or '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' to string and allows the application of '''[https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings formatting options]''' (as parameter). &amp;lt;br/&amp;gt;Adding a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; to the end of the format-parameter allows '''[https://docs.microsoft.com/en-us/dotnet/api/system.math.truncate truncation]''' of all decimal places.&lt;br /&gt;
|-&lt;br /&gt;
| ToTypeConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Object || Object || String || Attempts to convert value to the Type specified in parameter, returning the value.&lt;br /&gt;
|- &lt;br /&gt;
| TypeNameToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object || String || Returns ''true'' if the type name of the value is present in the parameter-string (seperated by &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
|- &lt;br /&gt;
| TypeNameToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object || String || Inverted ''TypeNameTo&amp;lt;wbr/&amp;gt;BoolConverter''.&lt;br /&gt;
|- &lt;br /&gt;
| DataTemplateItemTemplateSelectorConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ChildItem&amp;lt;wbr/&amp;gt;Template&amp;lt;wbr/&amp;gt;Selector || String || String || Chooses what '''ChildItem&amp;lt;wbr/&amp;gt;Template&amp;lt;wbr/&amp;gt;Selector''' to return. Having a parameter with the content &amp;quot;Small&amp;quot; returns the small item template selector.&lt;br /&gt;
|- &lt;br /&gt;
| DataTemplateItemsPanelConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ItemsPanelTemplate || Query&amp;lt;wbr/&amp;gt;Details&amp;lt;wbr/&amp;gt;Page&amp;lt;wbr/&amp;gt;ViewModel || || Chooses what '''ItemPanel&amp;lt;wbr/&amp;gt;Template''' to return. Having a parameter with the content &amp;quot;Small&amp;quot; returns the small item template selector.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client | XAML | Xamarin]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Converters In Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Converters In Xamarin]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_3.6_(Server)&amp;diff=23523</id>
		<title>Version 3.6 (Server)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_3.6_(Server)&amp;diff=23523"/>
				<updated>2022-02-21T09:10:27Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable sortable&amp;quot; | width = &amp;quot;300&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Release Date&lt;br /&gt;
|- &lt;br /&gt;
| 3.6.0 || 2022.01.19&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Initial Release =&lt;br /&gt;
=== New features ===&lt;br /&gt;
* {{UBIK}} View Items provide the possibility to configure the data that should be (pre)loaded by a View when initiating a View Cache. Using this mechanism gives the customizer a very powerful instrument to tailor the preloading behavior for project-specific needs.&lt;br /&gt;
* {{UBIK}} View Cache Launcher has a possibility to configure a timespan in which the launcher stays inactive (See [[View_Cache_Launcher]]).&lt;br /&gt;
* {{UBIK}} Contexts can derive from each other now. Using this technique can reduce the amount of necessary work when configuring ACM and much more important, will increase maintainability.&lt;br /&gt;
* {{UBIK}} Views can derive from each other now. Using this technique can reduce the amount of necessary work when configuring Views and much more important, will increase maintainability.&lt;br /&gt;
* {{UBIK}} provides the possibility to distribute customizing related binaries via the database now. They do not need to be stored on a server file share anymore.&lt;br /&gt;
* {{UBIK}} supports Shape files for representing geospatial vector data on the map now (https://wiki.openstreetmap.org/wiki/Shapefiles)&lt;br /&gt;
** [[SYSCLS_MAPSHAPE|Map Shape Classification Object]]&lt;br /&gt;
* {{UBIK}} supports the configuration of objects being automatically synced (make offline available) on clients&lt;br /&gt;
** [[SYSCLS_OFFLINE_SYNC_CONFIGURATION|Offline Sync Configuration Classification Object]]&lt;br /&gt;
* Improved Group Rights Evaluation&lt;br /&gt;
** WebServer Setting UBIK.Service.GroupRightsUpdateIntervall provides the possibility to configure the reload interval fully independent from the Validity Periode now&lt;br /&gt;
** A possibility to trigger a reload of the UserGroups, Logins, and their rights via Custom Code is provided now.&lt;br /&gt;
** The reload of  UserGroups, Logins, and their rights is managed in the background now, which improves the WebServer performance&lt;br /&gt;
* {{UBIK}} provides a set of new features to provide the client with additional information about the current Login&lt;br /&gt;
** {{UBIK}} Web Service provides the possibility to fetch detailed information about the current login &lt;br /&gt;
** If configured, the current login is delivered as part of the infrastructure. The data can be easily be used by the client then&lt;br /&gt;
** The Classification [[SYSCLS_LOGIN|Login Classification]] identifies logins as such. The classification does not insist on the Passwordhash Property anymore.&lt;br /&gt;
* {{UBIK}} supports clients working with and sending data from different time zones&lt;br /&gt;
** A database setting gives the possibility to configure the timezone data - values are stored in the database (downward compatibility)&lt;br /&gt;
* Added [[Data_Import_Service]], a new externally triggered customizable {{UBIK}} Interface &lt;br /&gt;
* {{UBIK}} provides a new classification to define documents as media documents (photo, video, audio)&lt;br /&gt;
** [[SYSCLS_MEDIAFILEDOCUMENT|Media Document Classification]]&lt;br /&gt;
* {{UBIK}} Webservices provides a data import service for standardized imports now.&lt;br /&gt;
* UBIK supports the definition of Logins being limited to login via specific Operation Systems (e.g. an Android User can only login using an Android device but cannot log in using Windows or iOS)&lt;br /&gt;
* Extended the {{UBIK}} [[OSIPI_(Plugin)|OSIPI Plugin]] to be able to read data from the [https://docs.osisoft.com/bundle/ocs/page/ocs-content-portal-overview.html OSIsoft Cloud Services (OCS)].&lt;br /&gt;
* There is a new customizable event &amp;quot;OnBeforeRevertUnsavedChanges&amp;quot; which is triggered just before unsaved changes of one object get reverted&lt;br /&gt;
* UBIK Interface management provides a possibility to schedule the execution of an interface task now&lt;br /&gt;
* {{UBIK}} supports to change the type (MetaClass) of an instance event if it was already created. This provides a full set of new possibilities for the customizing as well as being able to react on new/changed project requirements&lt;br /&gt;
** The mechanism to convert the type of one instance is used when importing proxies via the new member (FindOrPrepareProxy) on the Proxymanager.&lt;br /&gt;
* {{UBIK}} now provides [[ServiceLogins]], a solution for managing service credentials to third-party systems easily and securely.&lt;br /&gt;
* [[HowTo:Configure_Dynamic_Selective_Lists|Dynamic Selective Lists]]&lt;br /&gt;
* {{UBIK}} supports to configure the min and max length of string properties now (https://wiki.augmensys.com/index.php?title=MetaProperty#Text_2).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* A problem with autonomous properties not being filled when performing a branch download is solved now.&lt;br /&gt;
* Relation Editor uses the correct Icons when displaying MetaProperties now (consistent with Details View).&lt;br /&gt;
* DisplayList uses the correct Icons when displaying MetaProperties now.&lt;br /&gt;
* Having more than 500 MetaProperties in the database caused an irritating issue when trying to set the MetaProxy Property Target. This issue is solved now.&lt;br /&gt;
* System Selective Lists can be sent to the client now.&lt;br /&gt;
* A bug in providing Childowner - Info in combination with an active ViewCache is fixed now.&lt;br /&gt;
* Customized Property Values do not interfere with the change of properties on the Web Service anymore.&lt;br /&gt;
* A bug with incorrect ClassType in the NUMERIC_SEQUENCE instance is fixed now.&lt;br /&gt;
* An issue with remaining MetaProperties (in the Sandbox-table) after Metaclass is released is fixed now.&lt;br /&gt;
* Sequential (MRO) Tasks forward their progress to their owners correctly now&lt;br /&gt;
* A potential problem occuring during the start of UBIK.Studio was fixed&lt;br /&gt;
* The object replication feature supports the enabled - property feature now. &lt;br /&gt;
* The processing of Command Files on the Enterprise Server was improved and runs less error prone&lt;br /&gt;
&lt;br /&gt;
=== Enhancements ===&lt;br /&gt;
* OPC/UA Live Values do support Attributes now&lt;br /&gt;
* The Login method persists Device Ids (sent from the clients) in UBIK now&lt;br /&gt;
* UBIK provides the possibility to inject your own Credentials Authentication mechanism now. This opens UBIK to use any user authentication system in the backend.&lt;br /&gt;
* UBIK uses a new logging solution. See [[Serilog]] for details.&lt;br /&gt;
* SQL Logging mechanism is easier to enable and the entries are extended showing&lt;br /&gt;
** Elapsed time&lt;br /&gt;
** Affected records&lt;br /&gt;
** Transaction start and end&lt;br /&gt;
** Occurred errors&lt;br /&gt;
* The UBIK Kernel allows deploying a locally staged customizing (without having the need to recompile it first) now.&lt;br /&gt;
* UBIK WebService provides detailed information about View Cache data including its loading performance&lt;br /&gt;
* Compiling the customizing does not copy symbol files to the project share anymore&lt;br /&gt;
* Staging (local compile) does not create a symbol file for the UI Customizing anymore.&lt;br /&gt;
* Staging (local compile) the customizing provides a symbol and the source file now. This is a prerequisite for debugging the customizing.&lt;br /&gt;
* Internal optimizations reduce the number of database accesses by far. This results in higher performance.&lt;br /&gt;
* UBIK uses Global error handling&lt;br /&gt;
* The UBIK Hotspotting Module supports processing new pdf Annotations now as well.&lt;br /&gt;
* The UBIK Hotspotting Module provides a new API for easing the processing of data.&lt;br /&gt;
* The UBIK Hotspotting Module triggers a Thumbnail update of the changed documents now.&lt;br /&gt;
* More performant object saving.&lt;br /&gt;
* Update mechanism provide LDAP System Metaclasses and their properties now.&lt;br /&gt;
* The UBIK Excel Module provides workflow activities to import data from MS Excel files.&lt;br /&gt;
* UBIK Clients terminate their tokens when logging out now (erroneous SessionManagement).&lt;br /&gt;
* The UBIK OLEDB Module now always uses the provider MSOLEDBSQL, instead of the deprecated SQLOLEDB.&lt;br /&gt;
* The relation replication feature provides the possibility to configure (using customizing code) for every single Relation Item whether it should be replicated or not.&lt;br /&gt;
* TLS 1.2 is now supported by the Web Services automatically, provided that .NET Framework 4.6.1 is installed on the server. &lt;br /&gt;
* A set of new Custom - Metaclasses are provided via the database update now:&lt;br /&gt;
** CustomAbstractScopeMetaClass&lt;br /&gt;
** CustomDocumentReplicationConfigurationMetaClass&lt;br /&gt;
** CustomInstanceReplicationConfigurationMetaClass&lt;br /&gt;
** CustomMetaQueryScopeMetaClass&lt;br /&gt;
** CustomMetaQueryViewItemMetaClass&lt;br /&gt;
** CustomRelationReplicationConfigurationMetaClass&lt;br /&gt;
** CustomReplicationConfigurationMetaClass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Build History Web Service =&lt;br /&gt;
* 3.6.0 Build 13704 on 2022.01.18&lt;br /&gt;
** Initial release.&lt;br /&gt;
* 3.6.0 Build 13820 on 2022.02.18&lt;br /&gt;
** A problem in Property.DisplayValue was fixed&lt;br /&gt;
** A problem when preloading of RelationViewItems (View Cache) is solved now&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Build History UBIK.Studio =&lt;br /&gt;
* 3.6.0 Build 13704 on 2022.01.18&lt;br /&gt;
** Initial release.&lt;br /&gt;
* 3.6.0 Build 13820 on 2022.02.18&lt;br /&gt;
** A problem in Property.DisplayValue was fixed&lt;br /&gt;
** A problem when preloading of RelationViewItems (View Cache) is solved now&lt;br /&gt;
** Importing of dead Links via the Interface Execution could lead to crashes. This problem is solved now.&lt;br /&gt;
** The Proxy property UBIK_UID Property is filled after updating to 3.6.0 now&lt;br /&gt;
** The orphaned Relation MetaClass &amp;quot;SYSREL_ADMINRIGHTS&amp;quot; gets deleted when updating to 3.6.0 now&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Build History UBIK.Plugins =&lt;br /&gt;
* 3.6.0 Build 13704 on 2022.01.18&lt;br /&gt;
** Initial release.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.6|Version 3.6(Server)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_3.6_(Server)&amp;diff=23522</id>
		<title>Version 3.6 (Server)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_3.6_(Server)&amp;diff=23522"/>
				<updated>2022-02-21T08:45:46Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* New features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable sortable&amp;quot; | width = &amp;quot;300&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Release Date&lt;br /&gt;
|- &lt;br /&gt;
| 3.6.0 || 2022.01.19&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Initial Release =&lt;br /&gt;
=== New features ===&lt;br /&gt;
* {{UBIK}} View Items provide the possibility to configure the data that should be (pre)loaded by a View when initiating a View Cache. Using this mechanism gives the customizer a very powerful instrument to tailor the preloading behavior for project-specific needs.&lt;br /&gt;
* {{UBIK}} View Cache Launcher has a possibility to configure a timespan in which the launcher stays inactive (See [[View_Cache_Launcher]]).&lt;br /&gt;
* {{UBIK}} Contexts can derive from each other now. Using this technique can reduce the amount of necessary work when configuring ACM and much more important, will increase maintainability.&lt;br /&gt;
* {{UBIK}} Views can derive from each other now. Using this technique can reduce the amount of necessary work when configuring Views and much more important, will increase maintainability.&lt;br /&gt;
* {{UBIK}} provides the possibility to distribute customizing related binaries via the database now. They do not need to be stored on a server file share anymore.&lt;br /&gt;
* {{UBIK}} supports Shape files for representing geospatial vector data on the map now (https://wiki.openstreetmap.org/wiki/Shapefiles)&lt;br /&gt;
** [[SYSCLS_MAPSHAPE|Map Shape Classification Object]]&lt;br /&gt;
* {{UBIK}} supports the configuration of objects being automatically synced (make offline available) on clients&lt;br /&gt;
** [[SYSCLS_OFFLINE_SYNC_CONFIGURATION|Offline Sync Configuration Classification Object]]&lt;br /&gt;
* Improved Group Rights Evaluation&lt;br /&gt;
** WebServer Setting UBIK.Service.GroupRightsUpdateIntervall provides the possibility to configure the reload interval fully independent from the Validity Periode now&lt;br /&gt;
** A possibility to trigger a reload of the UserGroups, Logins, and their rights via Custom Code is provided now.&lt;br /&gt;
** The reload of  UserGroups, Logins, and their rights is managed in the background now, which improves the WebServer performance&lt;br /&gt;
* {{UBIK}} provides a set of new features to provide the client with additional information about the current Login&lt;br /&gt;
** {{UBIK}} Web Service provides the possibility to fetch detailed information about the current login &lt;br /&gt;
** If configured, the current login is delivered as part of the infrastructure. The data can be easily be used by the client then&lt;br /&gt;
** The Classification [[SYSCLS_LOGIN|Login Classification]] identifies logins as such. The classification does not insist on the Passwordhash Property anymore.&lt;br /&gt;
* {{UBIK}} supports clients working with and sending data from different time zones&lt;br /&gt;
** A database setting gives the possibility to configure the timezone data - values are stored in the database (downward compatibility)&lt;br /&gt;
* Added [[Data_Import_Service]], a new externally triggered customizable {{UBIK}} Interface &lt;br /&gt;
* {{UBIK}} provides a new classification to define documents as media documents (photo, video, audio)&lt;br /&gt;
** [[SYSCLS_MEDIAFILEDOCUMENT|Media Document Classification]]&lt;br /&gt;
* {{UBIK}} Webservices provides a data import service for standardized imports now.&lt;br /&gt;
* UBIK supports the definition of Logins being limited to login via specific Operation Systems (e.g. an Android User can only login using an Android device but cannot log in using Windows or iOS)&lt;br /&gt;
* Extended the {{UBIK}} [[OSIPI_(Plugin)|OSIPI Plugin]] to be able to read data from the [https://docs.osisoft.com/bundle/ocs/page/ocs-content-portal-overview.html OSIsoft Cloud Services (OCS)].&lt;br /&gt;
* There is a new customizable event &amp;quot;OnBeforeRevertUnsavedChanges&amp;quot; which is triggered just before unsaved changes of one object get reverted&lt;br /&gt;
* UBIK Interface management provdies a possibility to schedule the execution of an interface task now&lt;br /&gt;
* {{UBIK}} supports to the change the type (MetaClass) of an instance event if it was already created. This provides a full set of new possibilities for the customizing as well as being able to react on new/changed project requirements&lt;br /&gt;
** The mechanism to convert the type of one instance is used when importing proxies via the new member (FindOrPrepareProxy) on the Proxymanager.&lt;br /&gt;
* {{UBIK}} now provides [[ServiceLogins]], a solution for managing service credentials to third-party systems easily and securely.&lt;br /&gt;
* [[HowTo:Configure_Dynamic_Selective_Lists|Dynamic Selective Lists]]&lt;br /&gt;
* {{UBIK}} supports to configure the min and max length of string properties now (https://wiki.augmensys.com/index.php?title=MetaProperty#Text_2).&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.6|Version 3.6(Server)]]&lt;br /&gt;
&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* A problem with autonomous properties not being filled when performing a branch download is solved now.&lt;br /&gt;
* Relation Editor uses the correct Icons when displaying MetaProperties now (consistent with Details View).&lt;br /&gt;
* DisplayList uses the correct Icons when displaying MetaProperties now.&lt;br /&gt;
* Having more than 500 MetaProperties in the database caused an irritating issue when trying to set the MetaProxy Property Target. This issue is solved now.&lt;br /&gt;
* System Selective Lists can be sent to the client now.&lt;br /&gt;
* A bug in providing Childowner - Info in combination with an active ViewCache is fixed now.&lt;br /&gt;
* Customized Property Values do not interfere with the change of properties on the Web Service anymore.&lt;br /&gt;
* A bug with incorrect ClassType in the NUMERIC_SEQUENCE instance is fixed now.&lt;br /&gt;
* An issue with remaining MetaProperties (in the Sandbox-table) after Metaclass is released is fixed now.&lt;br /&gt;
* Sequential (MRO) Tasks forward their progress to their owners correctly now&lt;br /&gt;
* A potential problem occuring during the start UBIK.Studio was fixed&lt;br /&gt;
* The object replication feature supports the enabled - property feature now. &lt;br /&gt;
* The processing of Command Files on the Enterprise Server was improved and runs less error prone&lt;br /&gt;
&lt;br /&gt;
=== Enhancements ===&lt;br /&gt;
* OPC/UA Live Values do support Attributes now&lt;br /&gt;
* The Login method persists Device Ids (sent from the clients) in UBIK now&lt;br /&gt;
* UBIK provides the possibility to inject your own Credentials Authentication mechanism now. This opens UBIK to use any user authentication system in the backend.&lt;br /&gt;
* UBIK uses a new logging solution. See [[Serilog]] for details.&lt;br /&gt;
* SQL Logging mechanism is easier to enable and the entries are extended showing&lt;br /&gt;
** Elapsed time&lt;br /&gt;
** Affected records&lt;br /&gt;
** Transaction start and end&lt;br /&gt;
** Occurred errors&lt;br /&gt;
* The UBIK Kernel allows deploying a locally staged customizing (without having the need to recompile it first) now.&lt;br /&gt;
* UBIK WebService provides detailed information about View Cache data including its loading performance&lt;br /&gt;
* Compiling the customizing does not copy symbol files to the project share anymore&lt;br /&gt;
* Staging (local compile) does not create a symbol file for the UI Customizing anymore.&lt;br /&gt;
* Staging (local compile) the customizing provides a symbol and the source file now. This is a prerequisite for debugging the customizing.&lt;br /&gt;
* Internal optimizations reduce the number of database accesses by far. This results in higher performance.&lt;br /&gt;
* UBIK uses Global error handling&lt;br /&gt;
* The UBIK Hotspotting Module supports processing new pdf Annotations now as well.&lt;br /&gt;
* The UBIK Hotspotting Module provides a new API for easing the processing of data.&lt;br /&gt;
* The UBIK Hotspotting Module triggers a Thumbnail update of the changed documents now.&lt;br /&gt;
* More performant object saving.&lt;br /&gt;
* Update mechanism provide LDAP System Metaclasses and their properties now.&lt;br /&gt;
* The UBIK Excel Module provides workflow activities to import data from MS Excel files.&lt;br /&gt;
* UBIK Clients terminate their tokens when logging out now (erroneous SessionManagement).&lt;br /&gt;
* The UBIK OLEDB Module now always uses the provider MSOLEDBSQL, instead of the deprecated SQLOLEDB.&lt;br /&gt;
* The relation replication feature provdies the possibility to configure (using customizing code) for every single Relation Item whether it should be replicated or not.&lt;br /&gt;
* TLS 1.2 is now supported by the Web Services automatically, provided that .NET Framework 4.6.1 is installed on the server. &lt;br /&gt;
* A set of new Custom - Metaclasses are provided via the database update now:&lt;br /&gt;
** CustomAbstractScopeMetaClass&lt;br /&gt;
** CustomDocumentReplicationConfigurationMetaClass&lt;br /&gt;
** CustomInstanceReplicationConfigurationMetaClass&lt;br /&gt;
** CustomMetaQueryScopeMetaClass&lt;br /&gt;
** CustomMetaQueryViewItemMetaClass&lt;br /&gt;
** CustomRelationReplicationConfigurationMetaClass&lt;br /&gt;
** CustomReplicationConfigurationMetaClass&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.6|Version 3.6(Server)]]&lt;br /&gt;
&lt;br /&gt;
= Build History Web Service =&lt;br /&gt;
* 3.6.0 Build 13704 on 2022.01.18&lt;br /&gt;
** Initial release.&lt;br /&gt;
* 3.6.0 Build 13820 on 2022.02.18&lt;br /&gt;
** A problem in Property.DisplayValue was fixed&lt;br /&gt;
** A problem when preloading of RelationViewItems (View Cache) is solved now&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.6|Version 3.6(Server)]]&lt;br /&gt;
&lt;br /&gt;
= Build History UBIK.Studio =&lt;br /&gt;
* 3.6.0 Build 13704 on 2022.01.18&lt;br /&gt;
** Initial release.&lt;br /&gt;
* 3.6.0 Build 13820 on 2022.02.18&lt;br /&gt;
** A problem in Property.DisplayValue was fixed&lt;br /&gt;
** A problem when preloading of RelationViewItems (View Cache) is solved now&lt;br /&gt;
** Importing of dead Links via the Interface Execution could lead to crashes. This problem is solved now.&lt;br /&gt;
** The Proxy property UBIK_UID Property is filled after updating to 3.6.0 now&lt;br /&gt;
** The orphaned Relation MetaClass &amp;quot;SYSREL_ADMINRIGHTS&amp;quot; gets deleted when updating to 3.6.0 now&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.6|Version 3.6(Server)]]&lt;br /&gt;
&lt;br /&gt;
= Build History UBIK.Plugins =&lt;br /&gt;
* 3.6.0 Build 13704 on 2022.01.18&lt;br /&gt;
** Initial release.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.6|Version 3.6(Server)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.0_(WinX)&amp;diff=23507</id>
		<title>Version 4.0 (WinX)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.0_(WinX)&amp;diff=23507"/>
				<updated>2022-02-16T08:54:41Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* Editor related templates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&lt;br /&gt;
== Beta ==&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
=== 4.0.? on 2021-??-?? {{key press|DevOps}} ===&lt;br /&gt;
* The app's default profile is now only generated during app startup when no other profiles are detected.&lt;br /&gt;
* Added a button in the developer mode to unpack and get all default XAML resources.&lt;br /&gt;
* Some security related improvements.&lt;br /&gt;
** The app now informs the web service to terminate the user session upon logout or app closing.&lt;br /&gt;
** The app no longer allows self signed server certificates.&lt;br /&gt;
* Moved some properties from GlobalStatusBarViewModel to AppStatusViewModel.&lt;br /&gt;
* The develop mode now also applies to the open dialog.&lt;br /&gt;
* Fixed an issue where the app can get into an invalid state if a user manages to browse to e.g. the root object page during a logout process.&lt;br /&gt;
* Improved the app performance when deleting large amount of data (which happens when e.g. evaluating online queries).&lt;br /&gt;
* Most features in the old app's top &amp;amp; bottom bars can now be used in customized UI. See [[Version_4.0_(WinX)#App_bars|XAML Notes - App bars]].&lt;br /&gt;
* Fixed an issue where unnecessary messages are logged. (&amp;quot;Message is null&amp;quot;)&lt;br /&gt;
* UBIK clients are now able to log all webservice communication related activities (in UBIKWebserviceDebug.log) for better trouble shooting. It can also be turned off using the EnableSyncLogging setting in the profiles. &lt;br /&gt;
* Fixed some misbehaviors in the signature editor. For example, the signing isn't properly disabled after the countdown ends when a stroke is not yet finished.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= XAML Notes =&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
It is highly recommended to start new UI customizings based on the default resources in {{UBIK}} 4. [[Developer_Mode#Features|Here]] is how you can get them from the app. Some major changes are listed below, please see every item for detailed information and whether your existing customizings will still work.&lt;br /&gt;
&lt;br /&gt;
== Obsolete resources ==&lt;br /&gt;
Some of the UI resources from the older versions no longer exist or are not used anymore.&lt;br /&gt;
&lt;br /&gt;
=== Converters ===&lt;br /&gt;
* PropertyItemToValueConverter is removed since it was not used at all. (This should not be used in any XAML customizings, If it is, please consider using alternatives or contact us.)&lt;br /&gt;
* StringToDateTimeTypesConverter was added. It should be used when Binding to a Date/Time property on a PropertyViewModel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.0 (WinX)]]&lt;br /&gt;
&lt;br /&gt;
=== App bars ===&lt;br /&gt;
These are the top and bottom bars that you bring out by mouse right clicks. The various buttons in them are now included in other parts of the new UI, meaning the bars are now unnecessary and no longer displayed. The custom templates used in these bars include the following.&lt;br /&gt;
* UBIKChildAction;&lt;br /&gt;
* UBIKPageAction.&lt;br /&gt;
For those who still want to use the old UI with these bars, [[Settings#General|UICompatibilityLevel]] should be set to lower than 400 in the profile.&lt;br /&gt;
&lt;br /&gt;
=== Child templates in UBIKGlobalStatusBar and UBIKGlobalBottomBar ===&lt;br /&gt;
The UBIKGlobalStatusBar and the UBIKGlobalBottomBar are redesigned and no longer use the following child templates.&lt;br /&gt;
* UBIKTopLeft;&lt;br /&gt;
* UBIKTopCenter;&lt;br /&gt;
* UBIKTopRight;&lt;br /&gt;
* UBIKBottomLeft;&lt;br /&gt;
* UBIKBottomRight.&lt;br /&gt;
This means such existing child templates in your project setups will not have any effect in {{UBIK}} 4, unless you still have the two parent/container templates customized where they are explicitly referenced.&lt;br /&gt;
&lt;br /&gt;
== XAML changes ==&lt;br /&gt;
Since there has been a major UI redesign in this version, quite a lot of changes in XAML code (especially bindings) are involved. We have striven to maintain backward compatibility, but some changes either are simply unavoidable or their long term benefits outweigh the efforts required this one time.&lt;br /&gt;
&lt;br /&gt;
=== UBIKChildPageAction ===&lt;br /&gt;
* The Visibility of &amp;lt;AppBarButton x:Name=&amp;quot;SaveButton&amp;quot; ... /&amp;gt; now adjusts according to setting &amp;quot;Content -&amp;gt; enable auto save mode&amp;quot;. Nothing will be broken if your existing XAMLs are not updated. However, the saving behavior might not match what's described in [[Settings#Content|Content -&amp;gt; AutoSaveMode]].&lt;br /&gt;
&lt;br /&gt;
=== UBIKPropertyArea/UBIKContentArea ===&lt;br /&gt;
* The ItemsSource and property count now use the result of an [[EvalExpression]]. Mass editing will no longer work or the count will be incorrect if not updated;&lt;br /&gt;
* Changed from &amp;quot;Properties.Items&amp;quot; to &amp;quot;Properties.VisibleItems&amp;quot; in bindings because Items/AllItems now also include those system/invisible ones that users are not supposed to see.&lt;br /&gt;
&lt;br /&gt;
=== UBIKPropertyItem/UBIKPriorityPropertyItem ===&lt;br /&gt;
* PriorityPropertyClickedCommand/PriorityPropertyRightClickedCommand are deleted since they are the same as PropertyClickedCommand/PropertyRightClickedCommand. You should use the latter instead;&lt;br /&gt;
* Removed &amp;quot;Content.&amp;quot;, &amp;quot;OwnerModel.&amp;quot; from bindings.&lt;br /&gt;
&lt;br /&gt;
=== UBIKGlobalStatusBar ===&lt;br /&gt;
Some properties are moved from GlobalStatusBarViewModel to AppStatusViewModel.&lt;br /&gt;
* &amp;quot;{Binding ProgressIndicator, ...}&amp;quot; is changed to &amp;quot;{Binding AppStatus.ProgressIndicator, ...}&amp;quot;&lt;br /&gt;
* &amp;quot;{Binding LoginState, ...}&amp;quot; is changed to &amp;quot;{Binding AppStatus.LoginState, ...}&amp;quot;&lt;br /&gt;
* &amp;quot;{Binding WritingToDB, ....]&amp;quot; is changed to &amp;quot;{Binding AppStatus.WritingToDB, ...}&amp;quot;&lt;br /&gt;
* &amp;quot;{Binding TaskCount, ....]&amp;quot; is changed to &amp;quot;{Binding AppStatus.TaskCount, ...}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== UBIKPropertyValueRecordDialog ===&lt;br /&gt;
* Changed from &amp;quot;PropertyItem&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings.&lt;br /&gt;
&lt;br /&gt;
=== Editor related templates ===&lt;br /&gt;
{{Hint|The changes are quite extensive and, therefore, we recommended you taking the default templates from the app and re-customize them from there.}}&lt;br /&gt;
&lt;br /&gt;
First of all for UBIKEditDateTime, UBIKEditDouble, UBIKEditInt, UBIKEditGuid, UBIKEditChart, UBIKEditGeo, UBIKEditBool, UBIKEditString.&lt;br /&gt;
* Changed from &amp;quot;EditDialogViewModel.PropertyItem&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings;&lt;br /&gt;
* Changed from &amp;quot;EditDialogViewModel&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings;&lt;br /&gt;
* Changed from &amp;quot;EditDialogViewModel.DeletePressedCommand&amp;quot; to &amp;quot;PropertyViewModel.DeleteValueCommand&amp;quot; in a binding; (UBIKEditGuid)&lt;br /&gt;
* Prefixed &amp;quot;EditDialogViewModel&amp;quot; with &amp;quot;PropertyViewModel.&amp;quot; in the binding of &amp;lt;Button x:Name=&amp;quot;TeachInButton&amp;quot; /&amp;gt;; (UBIKEditGeo)&lt;br /&gt;
* UBIKEditString was renamed from UBIKEdit.&lt;br /&gt;
* UBIKEditDateTime now needs the StringToDateTimeTypesConverter when Binding to a value on a PropertyViewModel. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then for UBIKEditDialogButtons, UBIKEditDialogHeader, UBIKEditDialogNACheck.&lt;br /&gt;
* Changed from &amp;quot;PropertyItem.Content.DisplayStrings&amp;quot; to &amp;quot;PropertyViewModel.OwnerObject.DisplayStrings&amp;quot; in bindings; (UBIKEditDialogHeader)&lt;br /&gt;
* Changed from &amp;quot;PropertyItem&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings;&lt;br /&gt;
* Prefixed bindings &amp;quot;EnableNAOption&amp;quot;, &amp;quot;NotApplicable&amp;quot;, &amp;quot;ValueDefinitions&amp;quot;, &amp;quot;ValueDefinition&amp;quot;, &amp;quot;EnableMultiValueEditing&amp;quot; &amp;amp; &amp;quot;CanExecuteConfirmEditCommand&amp;quot; with &amp;quot;PropertyViewModel.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.0 (WinX)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.0_(WinX)&amp;diff=23506</id>
		<title>Version 4.0 (WinX)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.0_(WinX)&amp;diff=23506"/>
				<updated>2022-02-16T08:54:26Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* Editor related templates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&lt;br /&gt;
== Beta ==&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
=== 4.0.? on 2021-??-?? {{key press|DevOps}} ===&lt;br /&gt;
* The app's default profile is now only generated during app startup when no other profiles are detected.&lt;br /&gt;
* Added a button in the developer mode to unpack and get all default XAML resources.&lt;br /&gt;
* Some security related improvements.&lt;br /&gt;
** The app now informs the web service to terminate the user session upon logout or app closing.&lt;br /&gt;
** The app no longer allows self signed server certificates.&lt;br /&gt;
* Moved some properties from GlobalStatusBarViewModel to AppStatusViewModel.&lt;br /&gt;
* The develop mode now also applies to the open dialog.&lt;br /&gt;
* Fixed an issue where the app can get into an invalid state if a user manages to browse to e.g. the root object page during a logout process.&lt;br /&gt;
* Improved the app performance when deleting large amount of data (which happens when e.g. evaluating online queries).&lt;br /&gt;
* Most features in the old app's top &amp;amp; bottom bars can now be used in customized UI. See [[Version_4.0_(WinX)#App_bars|XAML Notes - App bars]].&lt;br /&gt;
* Fixed an issue where unnecessary messages are logged. (&amp;quot;Message is null&amp;quot;)&lt;br /&gt;
* UBIK clients are now able to log all webservice communication related activities (in UBIKWebserviceDebug.log) for better trouble shooting. It can also be turned off using the EnableSyncLogging setting in the profiles. &lt;br /&gt;
* Fixed some misbehaviors in the signature editor. For example, the signing isn't properly disabled after the countdown ends when a stroke is not yet finished.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= XAML Notes =&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
It is highly recommended to start new UI customizings based on the default resources in {{UBIK}} 4. [[Developer_Mode#Features|Here]] is how you can get them from the app. Some major changes are listed below, please see every item for detailed information and whether your existing customizings will still work.&lt;br /&gt;
&lt;br /&gt;
== Obsolete resources ==&lt;br /&gt;
Some of the UI resources from the older versions no longer exist or are not used anymore.&lt;br /&gt;
&lt;br /&gt;
=== Converters ===&lt;br /&gt;
* PropertyItemToValueConverter is removed since it was not used at all. (This should not be used in any XAML customizings, If it is, please consider using alternatives or contact us.)&lt;br /&gt;
* StringToDateTimeTypesConverter was added. It should be used when Binding to a Date/Time property on a PropertyViewModel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.0 (WinX)]]&lt;br /&gt;
&lt;br /&gt;
=== App bars ===&lt;br /&gt;
These are the top and bottom bars that you bring out by mouse right clicks. The various buttons in them are now included in other parts of the new UI, meaning the bars are now unnecessary and no longer displayed. The custom templates used in these bars include the following.&lt;br /&gt;
* UBIKChildAction;&lt;br /&gt;
* UBIKPageAction.&lt;br /&gt;
For those who still want to use the old UI with these bars, [[Settings#General|UICompatibilityLevel]] should be set to lower than 400 in the profile.&lt;br /&gt;
&lt;br /&gt;
=== Child templates in UBIKGlobalStatusBar and UBIKGlobalBottomBar ===&lt;br /&gt;
The UBIKGlobalStatusBar and the UBIKGlobalBottomBar are redesigned and no longer use the following child templates.&lt;br /&gt;
* UBIKTopLeft;&lt;br /&gt;
* UBIKTopCenter;&lt;br /&gt;
* UBIKTopRight;&lt;br /&gt;
* UBIKBottomLeft;&lt;br /&gt;
* UBIKBottomRight.&lt;br /&gt;
This means such existing child templates in your project setups will not have any effect in {{UBIK}} 4, unless you still have the two parent/container templates customized where they are explicitly referenced.&lt;br /&gt;
&lt;br /&gt;
== XAML changes ==&lt;br /&gt;
Since there has been a major UI redesign in this version, quite a lot of changes in XAML code (especially bindings) are involved. We have striven to maintain backward compatibility, but some changes either are simply unavoidable or their long term benefits outweigh the efforts required this one time.&lt;br /&gt;
&lt;br /&gt;
=== UBIKChildPageAction ===&lt;br /&gt;
* The Visibility of &amp;lt;AppBarButton x:Name=&amp;quot;SaveButton&amp;quot; ... /&amp;gt; now adjusts according to setting &amp;quot;Content -&amp;gt; enable auto save mode&amp;quot;. Nothing will be broken if your existing XAMLs are not updated. However, the saving behavior might not match what's described in [[Settings#Content|Content -&amp;gt; AutoSaveMode]].&lt;br /&gt;
&lt;br /&gt;
=== UBIKPropertyArea/UBIKContentArea ===&lt;br /&gt;
* The ItemsSource and property count now use the result of an [[EvalExpression]]. Mass editing will no longer work or the count will be incorrect if not updated;&lt;br /&gt;
* Changed from &amp;quot;Properties.Items&amp;quot; to &amp;quot;Properties.VisibleItems&amp;quot; in bindings because Items/AllItems now also include those system/invisible ones that users are not supposed to see.&lt;br /&gt;
&lt;br /&gt;
=== UBIKPropertyItem/UBIKPriorityPropertyItem ===&lt;br /&gt;
* PriorityPropertyClickedCommand/PriorityPropertyRightClickedCommand are deleted since they are the same as PropertyClickedCommand/PropertyRightClickedCommand. You should use the latter instead;&lt;br /&gt;
* Removed &amp;quot;Content.&amp;quot;, &amp;quot;OwnerModel.&amp;quot; from bindings.&lt;br /&gt;
&lt;br /&gt;
=== UBIKGlobalStatusBar ===&lt;br /&gt;
Some properties are moved from GlobalStatusBarViewModel to AppStatusViewModel.&lt;br /&gt;
* &amp;quot;{Binding ProgressIndicator, ...}&amp;quot; is changed to &amp;quot;{Binding AppStatus.ProgressIndicator, ...}&amp;quot;&lt;br /&gt;
* &amp;quot;{Binding LoginState, ...}&amp;quot; is changed to &amp;quot;{Binding AppStatus.LoginState, ...}&amp;quot;&lt;br /&gt;
* &amp;quot;{Binding WritingToDB, ....]&amp;quot; is changed to &amp;quot;{Binding AppStatus.WritingToDB, ...}&amp;quot;&lt;br /&gt;
* &amp;quot;{Binding TaskCount, ....]&amp;quot; is changed to &amp;quot;{Binding AppStatus.TaskCount, ...}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== UBIKPropertyValueRecordDialog ===&lt;br /&gt;
* Changed from &amp;quot;PropertyItem&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings.&lt;br /&gt;
&lt;br /&gt;
=== Editor related templates ===&lt;br /&gt;
{{Hint|The changes are quite extensive and, therefore, we recommended you taking the default templates from the app and re-customize them from there.}}&lt;br /&gt;
&lt;br /&gt;
First of all for UBIKEditDateTime, UBIKEditDouble, UBIKEditInt, UBIKEditGuid, UBIKEditChart, UBIKEditGeo, UBIKEditBool, UBIKEditString.&lt;br /&gt;
* Changed from &amp;quot;EditDialogViewModel.PropertyItem&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings;&lt;br /&gt;
* Changed from &amp;quot;EditDialogViewModel&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings;&lt;br /&gt;
* Changed from &amp;quot;EditDialogViewModel.DeletePressedCommand&amp;quot; to &amp;quot;PropertyViewModel.DeleteValueCommand&amp;quot; in a binding; (UBIKEditGuid)&lt;br /&gt;
* Prefixed &amp;quot;EditDialogViewModel&amp;quot; with &amp;quot;PropertyViewModel.&amp;quot; in the binding of &amp;lt;Button x:Name=&amp;quot;TeachInButton&amp;quot; /&amp;gt;; (UBIKEditGeo)&lt;br /&gt;
* UBIKEditString was renamed from UBIKEdit.&lt;br /&gt;
* UBIKEditDateTime now needs the StringToDateTimeTypesConverter when Binding to a value on a PropertyViewModel. &lt;br /&gt;
&lt;br /&gt;
Then for UBIKEditDialogButtons, UBIKEditDialogHeader, UBIKEditDialogNACheck.&lt;br /&gt;
* Changed from &amp;quot;PropertyItem.Content.DisplayStrings&amp;quot; to &amp;quot;PropertyViewModel.OwnerObject.DisplayStrings&amp;quot; in bindings; (UBIKEditDialogHeader)&lt;br /&gt;
* Changed from &amp;quot;PropertyItem&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings;&lt;br /&gt;
* Prefixed bindings &amp;quot;EnableNAOption&amp;quot;, &amp;quot;NotApplicable&amp;quot;, &amp;quot;ValueDefinitions&amp;quot;, &amp;quot;ValueDefinition&amp;quot;, &amp;quot;EnableMultiValueEditing&amp;quot; &amp;amp; &amp;quot;CanExecuteConfirmEditCommand&amp;quot; with &amp;quot;PropertyViewModel.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.0 (WinX)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.0_(WinX)&amp;diff=23505</id>
		<title>Version 4.0 (WinX)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.0_(WinX)&amp;diff=23505"/>
				<updated>2022-02-16T08:47:53Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* Converters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&lt;br /&gt;
== Beta ==&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
=== 4.0.? on 2021-??-?? {{key press|DevOps}} ===&lt;br /&gt;
* The app's default profile is now only generated during app startup when no other profiles are detected.&lt;br /&gt;
* Added a button in the developer mode to unpack and get all default XAML resources.&lt;br /&gt;
* Some security related improvements.&lt;br /&gt;
** The app now informs the web service to terminate the user session upon logout or app closing.&lt;br /&gt;
** The app no longer allows self signed server certificates.&lt;br /&gt;
* Moved some properties from GlobalStatusBarViewModel to AppStatusViewModel.&lt;br /&gt;
* The develop mode now also applies to the open dialog.&lt;br /&gt;
* Fixed an issue where the app can get into an invalid state if a user manages to browse to e.g. the root object page during a logout process.&lt;br /&gt;
* Improved the app performance when deleting large amount of data (which happens when e.g. evaluating online queries).&lt;br /&gt;
* Most features in the old app's top &amp;amp; bottom bars can now be used in customized UI. See [[Version_4.0_(WinX)#App_bars|XAML Notes - App bars]].&lt;br /&gt;
* Fixed an issue where unnecessary messages are logged. (&amp;quot;Message is null&amp;quot;)&lt;br /&gt;
* UBIK clients are now able to log all webservice communication related activities (in UBIKWebserviceDebug.log) for better trouble shooting. It can also be turned off using the EnableSyncLogging setting in the profiles. &lt;br /&gt;
* Fixed some misbehaviors in the signature editor. For example, the signing isn't properly disabled after the countdown ends when a stroke is not yet finished.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= XAML Notes =&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
It is highly recommended to start new UI customizings based on the default resources in {{UBIK}} 4. [[Developer_Mode#Features|Here]] is how you can get them from the app. Some major changes are listed below, please see every item for detailed information and whether your existing customizings will still work.&lt;br /&gt;
&lt;br /&gt;
== Obsolete resources ==&lt;br /&gt;
Some of the UI resources from the older versions no longer exist or are not used anymore.&lt;br /&gt;
&lt;br /&gt;
=== Converters ===&lt;br /&gt;
* PropertyItemToValueConverter is removed since it was not used at all. (This should not be used in any XAML customizings, If it is, please consider using alternatives or contact us.)&lt;br /&gt;
* StringToDateTimeTypesConverter was added. It should be used when Binding to a Date/Time property on a PropertyViewModel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.0 (WinX)]]&lt;br /&gt;
&lt;br /&gt;
=== App bars ===&lt;br /&gt;
These are the top and bottom bars that you bring out by mouse right clicks. The various buttons in them are now included in other parts of the new UI, meaning the bars are now unnecessary and no longer displayed. The custom templates used in these bars include the following.&lt;br /&gt;
* UBIKChildAction;&lt;br /&gt;
* UBIKPageAction.&lt;br /&gt;
For those who still want to use the old UI with these bars, [[Settings#General|UICompatibilityLevel]] should be set to lower than 400 in the profile.&lt;br /&gt;
&lt;br /&gt;
=== Child templates in UBIKGlobalStatusBar and UBIKGlobalBottomBar ===&lt;br /&gt;
The UBIKGlobalStatusBar and the UBIKGlobalBottomBar are redesigned and no longer use the following child templates.&lt;br /&gt;
* UBIKTopLeft;&lt;br /&gt;
* UBIKTopCenter;&lt;br /&gt;
* UBIKTopRight;&lt;br /&gt;
* UBIKBottomLeft;&lt;br /&gt;
* UBIKBottomRight.&lt;br /&gt;
This means such existing child templates in your project setups will not have any effect in {{UBIK}} 4, unless you still have the two parent/container templates customized where they are explicitly referenced.&lt;br /&gt;
&lt;br /&gt;
== XAML changes ==&lt;br /&gt;
Since there has been a major UI redesign in this version, quite a lot of changes in XAML code (especially bindings) are involved. We have striven to maintain backward compatibility, but some changes either are simply unavoidable or their long term benefits outweigh the efforts required this one time.&lt;br /&gt;
&lt;br /&gt;
=== UBIKChildPageAction ===&lt;br /&gt;
* The Visibility of &amp;lt;AppBarButton x:Name=&amp;quot;SaveButton&amp;quot; ... /&amp;gt; now adjusts according to setting &amp;quot;Content -&amp;gt; enable auto save mode&amp;quot;. Nothing will be broken if your existing XAMLs are not updated. However, the saving behavior might not match what's described in [[Settings#Content|Content -&amp;gt; AutoSaveMode]].&lt;br /&gt;
&lt;br /&gt;
=== UBIKPropertyArea/UBIKContentArea ===&lt;br /&gt;
* The ItemsSource and property count now use the result of an [[EvalExpression]]. Mass editing will no longer work or the count will be incorrect if not updated;&lt;br /&gt;
* Changed from &amp;quot;Properties.Items&amp;quot; to &amp;quot;Properties.VisibleItems&amp;quot; in bindings because Items/AllItems now also include those system/invisible ones that users are not supposed to see.&lt;br /&gt;
&lt;br /&gt;
=== UBIKPropertyItem/UBIKPriorityPropertyItem ===&lt;br /&gt;
* PriorityPropertyClickedCommand/PriorityPropertyRightClickedCommand are deleted since they are the same as PropertyClickedCommand/PropertyRightClickedCommand. You should use the latter instead;&lt;br /&gt;
* Removed &amp;quot;Content.&amp;quot;, &amp;quot;OwnerModel.&amp;quot; from bindings.&lt;br /&gt;
&lt;br /&gt;
=== UBIKGlobalStatusBar ===&lt;br /&gt;
Some properties are moved from GlobalStatusBarViewModel to AppStatusViewModel.&lt;br /&gt;
* &amp;quot;{Binding ProgressIndicator, ...}&amp;quot; is changed to &amp;quot;{Binding AppStatus.ProgressIndicator, ...}&amp;quot;&lt;br /&gt;
* &amp;quot;{Binding LoginState, ...}&amp;quot; is changed to &amp;quot;{Binding AppStatus.LoginState, ...}&amp;quot;&lt;br /&gt;
* &amp;quot;{Binding WritingToDB, ....]&amp;quot; is changed to &amp;quot;{Binding AppStatus.WritingToDB, ...}&amp;quot;&lt;br /&gt;
* &amp;quot;{Binding TaskCount, ....]&amp;quot; is changed to &amp;quot;{Binding AppStatus.TaskCount, ...}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== UBIKPropertyValueRecordDialog ===&lt;br /&gt;
* Changed from &amp;quot;PropertyItem&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings.&lt;br /&gt;
&lt;br /&gt;
=== Editor related templates ===&lt;br /&gt;
{{Hint|The changes are quite extensive and, therefore, we recommended you taking the default templates from the app and re-customize them from there.}}&lt;br /&gt;
&lt;br /&gt;
First of all for UBIKEditDateTime, UBIKEditDouble, UBIKEditInt, UBIKEditGuid, UBIKEditChart, UBIKEditGeo, UBIKEditBool, UBIKEditString.&lt;br /&gt;
* Changed from &amp;quot;EditDialogViewModel.PropertyItem&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings;&lt;br /&gt;
* Changed from &amp;quot;EditDialogViewModel&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings;&lt;br /&gt;
* Changed from &amp;quot;EditDialogViewModel.DeletePressedCommand&amp;quot; to &amp;quot;PropertyViewModel.DeleteValueCommand&amp;quot; in a binding; (UBIKEditGuid)&lt;br /&gt;
* Prefixed &amp;quot;EditDialogViewModel&amp;quot; with &amp;quot;PropertyViewModel.&amp;quot; in the binding of &amp;lt;Button x:Name=&amp;quot;TeachInButton&amp;quot; /&amp;gt;; (UBIKEditGeo)&lt;br /&gt;
* UBIKEditString was renamed from UBIKEdit.&lt;br /&gt;
&lt;br /&gt;
Then for UBIKEditDialogButtons, UBIKEditDialogHeader, UBIKEditDialogNACheck.&lt;br /&gt;
* Changed from &amp;quot;PropertyItem.Content.DisplayStrings&amp;quot; to &amp;quot;PropertyViewModel.OwnerObject.DisplayStrings&amp;quot; in bindings; (UBIKEditDialogHeader)&lt;br /&gt;
* Changed from &amp;quot;PropertyItem&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings;&lt;br /&gt;
* Prefixed bindings &amp;quot;EnableNAOption&amp;quot;, &amp;quot;NotApplicable&amp;quot;, &amp;quot;ValueDefinitions&amp;quot;, &amp;quot;ValueDefinition&amp;quot;, &amp;quot;EnableMultiValueEditing&amp;quot; &amp;amp; &amp;quot;CanExecuteConfirmEditCommand&amp;quot; with &amp;quot;PropertyViewModel.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 4.0 (WinX)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Version_4.1_(Xamarin)&amp;diff=23504</id>
		<title>Version 4.1 (Xamarin)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Version_4.1_(Xamarin)&amp;diff=23504"/>
				<updated>2022-02-16T08:46:16Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* Converters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&lt;br /&gt;
== Beta ==&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
=== 4.0.? on 2021-??-?? {{key press|App Center}} ===&lt;br /&gt;
* The app's default profile is now only generated during app startup when no other profiles are detected.&lt;br /&gt;
* Xamarin Android now supports [[Managed_App_Configuration|managed app configuration]] for rolling out up to 9 Ubik profiles in an enterprise environment.&lt;br /&gt;
* Some security related improvements.&lt;br /&gt;
** The app now informs the web service to terminate the user session upon logout or app closing.&lt;br /&gt;
** The app no longer allows self signed server certificates.&lt;br /&gt;
* The app's entire login page is now customizable.&lt;br /&gt;
** As a result, the old feature which allows customizers to configure the background image of the login page (bg_portrait.png/bg_landscape.png) is removed. Because it only worked for Xamarin.UWP and can now be done with regular XAML customizing.&lt;br /&gt;
* Fixed an issue where unnecessary messages are logged. (&amp;quot;Message is null&amp;quot;)&lt;br /&gt;
* UBIK clients are now able to log all webservice communication related activities (in UBIKWebserviceDebug.log) for better trouble shooting. It can also be turned off using the EnableSyncLogging setting in the profiles. &lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= XAML Notes =&lt;br /&gt;
&lt;br /&gt;
== XAML changes ==&lt;br /&gt;
Since there has been a major UI redesign in this version, quite a lot of changes in XAML code (especially bindings) are involved. We have striven to maintain backward compatibility, but some changes either are simply unavoidable or their long term benefits outweigh the efforts required this one time.&lt;br /&gt;
&lt;br /&gt;
=== Converters ===&lt;br /&gt;
* Under namespace UBIK.CPL.Converters, SelectiveItemToValueConverter is renamed as PropertyValueToSelectiveItemConverter to properly reflect what it does.&lt;br /&gt;
* Under namespace UBIK.CPL.Converters, a new &amp;quot;StringToDateTimeTypesConverter&amp;quot; was added. It should be used when binding to a Date/Time Property on a PropertyViewModel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Version 4.0 Xamarin|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.0 Xamarin]]&lt;br /&gt;
&lt;br /&gt;
=== UBIKContentArea ===&lt;br /&gt;
* Changed from &amp;quot;Properties.Items&amp;quot; to &amp;quot;Properties.VisibleItems&amp;quot; in bindings because Items/AllItems now also include those system/invisible ones that users are not supposed to see.&lt;br /&gt;
&lt;br /&gt;
=== UBIKThemes ===&lt;br /&gt;
* Removed &amp;quot;Content.&amp;quot;, &amp;quot;OwnerModel.&amp;quot; from bindings in DateTemplate &amp;quot;UBIKPropertyItem&amp;quot;.&lt;br /&gt;
* &amp;quot;SetValueCommand&amp;quot;  is no longer available and replaced with &amp;quot;SetPropertyValueCommand&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Version 4.0 Xamarin|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.0 Xamarin]]&lt;br /&gt;
&lt;br /&gt;
=== UBIKEditNA ===&lt;br /&gt;
* Prefixed bindings &amp;quot;EnableNAOption&amp;quot; &amp;amp; &amp;quot;NotApplicable&amp;quot; with &amp;quot;PropertyViewModel.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Editor related templates ===&lt;br /&gt;
{{Hint|The changes are quite extensive and, therefore, we recommended you taking the default templates from the app and re-customize them from there.}}&lt;br /&gt;
&lt;br /&gt;
The affected list of templates include: UBIKEditDateTime, UBIKEditDouble, UBIKEditInt, UBIKEditGuid, UBIKEditGeo, UBIKEditBool, UBIKEditString.&lt;br /&gt;
* Changed from &amp;quot;PropertyItem&amp;quot; to &amp;quot;PropertyViewModel&amp;quot; in bindings;&lt;br /&gt;
* Prefixed bindings &amp;quot;EnableNAOption&amp;quot;, &amp;quot;NotApplicable&amp;quot;, &amp;quot;Unit&amp;quot; &amp;amp; &amp;quot;ShowComboBox&amp;quot; with &amp;quot;PropertyViewModel.&amp;quot;;&lt;br /&gt;
* Changed from &amp;quot;PropertyValue&amp;quot; to &amp;quot;PropertyViewModel.ValueItem.PropertyValue&amp;quot; in bindings;&lt;br /&gt;
* Prefixed binding &amp;quot;FilterQueryResults.Items&amp;quot; with &amp;quot;PropertyViewModel.&amp;quot;; (UBIKEditGuid)&lt;br /&gt;
* Changed from &amp;quot;ViewGuidObjectCommand&amp;quot; to &amp;quot;NavigateToGuidCommand&amp;quot;.  (UBIKEditGuid)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Version 4.0|Version 4.0 Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Version 4.0 Xamarin]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Converters_In_Mobile&amp;diff=23499</id>
		<title>Converters In Mobile</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Converters_In_Mobile&amp;diff=23499"/>
				<updated>2022-02-14T12:57:57Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* List of Available Converters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''See also: [[XAML#Converters|Converters in UWP/WinX]]''&lt;br /&gt;
&lt;br /&gt;
'''Converters''' are used to prepare application data to format a UI defined by a XAML markup. These converters make it possible to show elements only when specific conditions (like data being available) are met. This allows the creation of a good UI with XAML code only, improving code readability while also decreasing code complexity.&lt;br /&gt;
&lt;br /&gt;
This page explains how to properly use converters for customizing the UBIK Xamarin User Interface. Furthermore, all available converters are listed to provide a good reference.&lt;br /&gt;
&lt;br /&gt;
= Definition =&lt;br /&gt;
In Xamarin, before converters can be used, they need to be defined in the page's ''Resources'' tag. Make sure to include the &amp;lt;code&amp;gt;UBIK.CPL.Converters&amp;lt;/code&amp;gt; namespace in the namespace definitions!&lt;br /&gt;
The following example shows how the &amp;lt;code&amp;gt;NullToBoolConverter&amp;lt;/code&amp;gt; can be defined:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:converters=&amp;quot;clr-namespace:UBIK.CPL.Converters;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;converters:NullToBoolConverter x:Key=&amp;quot;NullToBool&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Cuztomizing --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The key ''NullToBool'' makes this converter accessible from the customizing in this page.&lt;br /&gt;
== Definition With Properties ==&lt;br /&gt;
In the following example, which is the same example from above, the '''StringFormatConverter''' will be additionally defined. To add more formatting possibilities, it has two extra properties, which need to be prefilled during initialization. Henceforth, these properties can be prefilled with static values or with static references.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:converters=&amp;quot;clr-namespace:UBIK.CPL.Converters;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;converters:NullToBoolConverter x:Key=&amp;quot;NullToBool&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;converters:StringFormatConverter x:Key=&amp;quot;Formatter&amp;quot; Parameter1=&amp;quot;5&amp;quot; Parameter2=&amp;quot;{Binding Children.Items.Count}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Cuztomizing --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Whereever this converter is used within the file it was defined in, ''Formatter'' will always have its ''Parameter1'' set to ''5'' and its ''Parameter2'' to the number of children of the currently viewed UBIK object. If this behavior is not intended, consider defining another ''StringFormatConverter'' with a '''different Key''' in the same way as shown above.&amp;lt;br/&amp;gt;&lt;br /&gt;
See below to find out how to use this converter!&lt;br /&gt;
= Usage =&lt;br /&gt;
A converter can only be used in conjunction with a &amp;lt;code&amp;gt;{Binding}&amp;lt;/code&amp;gt;. The following is an easy example, showing how the ''NullToBool'' converter, defined above, can be used.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;My Text&amp;quot; IsVisible=&amp;quot;{Binding MyBindableProperty, Converter={StaticResource NullToBool}}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If '''MyBindableProperty''' is ''null'' or an empty string, the converter will return '''true''', making the Label visible!&lt;br /&gt;
== Parameter ==&lt;br /&gt;
Some converters accept a '''ConverterParameter''', that passes additional information. Closely read the description of the available converters to find out which accept or even require a parameter to work properly. In Ubik, some converters accept a string parameter, consisting of multiple individual parameters separated by &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
An example of this behavior is the '''ContainsToBoolConverter''', which checks if the current value is contained within a collection of values (passed as the ''parameter''):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;My Text&amp;quot; IsVisible=&amp;quot;{Binding MyValue, Converter={StaticResource ContainsToBool}, ConverterParameter=1|2|3|4|5|6|7|8|9}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The label will only be visible if the ''MyValue'' property (which is expected to parse as an Integer in this example) is one of the values of the parameter.&amp;lt;br/&amp;gt;&lt;br /&gt;
Again, to get the converter working, don't forget to define it in the page's resources!&lt;br /&gt;
&lt;br /&gt;
== FallbackValue ==&lt;br /&gt;
In some rare cases, a converter might not return anything desired (like ''null'') if some condition doesn't work out as it should (e.g. ''value'' is ''null''). To still be able to get a usable return value, it's possible to define a '''FallbackValue'''.&lt;br /&gt;
&lt;br /&gt;
== Example Usage of StringFormatConverter ==&lt;br /&gt;
This converter can take up to two additional parameters during definition. Please see [[#Definition With Properties|Definition With Properties]] for more information!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;{Binding MyValue, Converter={StaticResource Formatter}, ConverterParameter=The Value of my value is \{0\}\, compared to \{1\} and \{2\}!}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It's important to note that special characters, like &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;,&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, need to be escaped using a &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, else the expression will be wrongly interpreted (and nothing happens)!&lt;br /&gt;
&lt;br /&gt;
The text of the '''ConverterParameter''' will be analyzed, and any occurrance (including duplicates) of &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{1}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{2}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; replaced with the '''binding value''', '''Formatter.Parameter1''' and '''Formatter.Parameter2''' respectively!&lt;br /&gt;
&lt;br /&gt;
Make sure to note, that Xamarin Forms has a native '''[https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/string-formatting StringFormat]''' option as well, that is probably way faster than using a converter for it. Furthermore, it supports formatting options!&lt;br /&gt;
&lt;br /&gt;
= Data Source =&lt;br /&gt;
Although technically not a converter, the '''SfDataSourceExt''' control is currently on the way of replacing the '''SfDataSourceConverter''', due to improved performance.&lt;br /&gt;
The usage is pretty simple: Similar to the converters, it needs to be defined in the '''Page Resources'''. Then, a '''Key''' and '''Expression''', as well as an '''ItemsSource''' have to be defined. Last, but not least, the the converter can be used within the '''ItemsSource''' property of a Syncfusion '''SfListView'''. See the following example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
             &amp;lt;controls:SfDataSourceExt&lt;br /&gt;
                x:Key=&amp;quot;MyDataSource&amp;quot;&lt;br /&gt;
                ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot;&lt;br /&gt;
                Expression=&amp;quot;Item.Content.MetaUID.ToString().ToLower()==&amp;amp;quot;85a50533-3817-4a0b-84cd-615b48b62565&amp;amp;quot; &amp;amp;amp;&amp;amp;amp; Item[&amp;amp;quot;ORGA_STATUS&amp;amp;quot;]!=100&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    &amp;lt;sync:SfListView&lt;br /&gt;
           x:Name=&amp;quot;ListView1&amp;quot;&lt;br /&gt;
           AllowSwiping=&amp;quot;True&amp;quot;&lt;br /&gt;
           ItemSize=&amp;quot;60&amp;quot;&lt;br /&gt;
           ItemTemplate=&amp;quot;{StaticResource ChildTemplateSelector}&amp;quot;&lt;br /&gt;
           ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource MyDataSource}}&amp;quot;&lt;br /&gt;
           LeftSwipeTemplate=&amp;quot;{StaticResource SwipeLeftTemplateSelector}&amp;quot;&lt;br /&gt;
           RightSwipeTemplate=&amp;quot;{StaticResource SwipeRightTemplateSelector}&amp;quot;&lt;br /&gt;
           SelectionMode=&amp;quot;None&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Thanks to the given expression, filtering is applied once the data source is evaluated. It's important to have [https://www.advancedinstaller.com/user-guide/xml-escaped-chars.html XML special characters] correctly escaped, like the example shows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= List of Available Converters =&lt;br /&gt;
The following list contains all currently available converters for UBIK Xamarin customizing. &lt;br /&gt;
&lt;br /&gt;
'''Two-way''' converters can be used with two-way bindings, e.g. a text-box displaying an editable value. If the value updates in the model, the text-box text changes. If the user edits the value, the value in the model behind also gets updated.&lt;br /&gt;
As a clarification, '''Value''' refers to the '''Binding Value''', and '''parameter''' to the '''ConverterParameter'''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Converter !! 2-Way !! Output Type || Input Type || Parameter Type || Description &lt;br /&gt;
|-&lt;br /&gt;
| BooleanConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Boolean, String || || &lt;br /&gt;
Interprets a '''boolean value''' or a '''String value''' and returns it. If the value cannot be interpreted, ''false'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| BooleanInvertConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Boolean, String || || &lt;br /&gt;
Interprets a '''boolean value''' or a '''String value''' and converts it into its '''inverted value'''. If the value cannot be interpreted, ''false'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| BooleanToFontAttributeConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || FontAttribute || Boolean || || &lt;br /&gt;
Converts a '''boolean''' into a '''[https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.fontattributes?view=xamarin-forms font attribute]''' value. In detail, if the value is ''true'', the parameter is interpreted (''Bold'', ''Italic'', ''None'') and returned. The default returned font-attribute is ''None''.&lt;br /&gt;
|- &lt;br /&gt;
| ByteToImageSourceValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ImageSource || Byte[ ],&amp;lt;br/&amp;gt;Byte Stream || || &lt;br /&gt;
Converts a '''byte stream''' value into an '''image source'''.&lt;br /&gt;
|- &lt;br /&gt;
| ChildAreaTemplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Child&amp;lt;wbr/&amp;gt;Area&amp;lt;wbr/&amp;gt;Template || Content&amp;lt;wbr/&amp;gt;ViewModel || || &lt;br /&gt;
Returns a '''ChildAreaTemplate''' from a '''Content&amp;lt;wbr/&amp;gt;ViewModel''' or ''null'' if the ViewModel cannot be interpreted.&lt;br /&gt;
|- &lt;br /&gt;
| ChildItem&amp;lt;wbr/&amp;gt;SelectionMode&amp;lt;wbr/&amp;gt;To&amp;lt;wbr/&amp;gt;SfListView&amp;lt;wbr/&amp;gt;SelectionMode&amp;lt;wbr/&amp;gt;Converter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || [https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.SfListView~SelectionMode.html ListView&amp;lt;wbr/&amp;gt;SelectionMode] || ChildItem&amp;lt;wbr/&amp;gt;SelectionMode || || &lt;br /&gt;
Converts a '''ChildItem&amp;lt;wbr/&amp;gt;SelectionMode''' to a Syncfusion '''[https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.SfListView~SelectionMode.html ListView&amp;lt;wbr/&amp;gt;SelectionMode]'''. Default is &amp;quot;Single&amp;quot;.&lt;br /&gt;
|- &lt;br /&gt;
| ClassificationToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || ContentViewModel || || &lt;br /&gt;
Returns a '''boolean''' indicating whether the given '''ContentViewModel''' is successfully classified.&lt;br /&gt;
|- &lt;br /&gt;
| ContainsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;Object || || &lt;br /&gt;
Checks if the delivered value is '''contained''' within a collection of values (delivered in the parameter, seperated with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;). If the value is contained, ''true'' will be returned, else ''false''. The functionality is similar to the ''ContainsToVisibilityConverter'' in the WinX project.&lt;br /&gt;
|- &lt;br /&gt;
| ContainsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;Object || || &lt;br /&gt;
Same as the ''ContainsToBoolConverter'', but with '''inverted output'''.&lt;br /&gt;
|- &lt;br /&gt;
| ContentAreaTeamplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || UBIKContentArea || ContentViewModel || || This converter is '''not yet finished''' and just returns the ''UBIKContentArea'' if the value is a ''ContentViewModel''.&lt;br /&gt;
|- &lt;br /&gt;
| StringToDateTimeTypesConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓  || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime], [https://docs.microsoft.com/en-us/dotnet/api/system.timespan TimeSpan] || String || || &lt;br /&gt;
Converts a String to the correct DateType, which can be either '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' or '''[https://docs.microsoft.com/en-us/dotnet/api/system.timespan TimeSpan]'''. If the value cannot be interpreted, the unchanged String value is returned.&lt;br /&gt;
|- &lt;br /&gt;
| DateTimeOffsetToDateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime] || [https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset DateTimeOffset] || || &lt;br /&gt;
Converts a '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset DateTimeOffset]''' to the correct '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''', applied to the current date and time. If the value cannot be interpreted, a new ''DateTime'', generated from the device's current time (&amp;lt;code&amp;gt;DateTime.Now&amp;lt;/code&amp;gt;) is returned.&lt;br /&gt;
|- &lt;br /&gt;
| DateTimeToFromNowStringConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime] || || &lt;br /&gt;
Returns a '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' into a human-readable and easily understandable ''string message'' (the last applying one will be taken):&lt;br /&gt;
* Less than 5 minutes in the past: ''Just now''&lt;br /&gt;
* Less than 10 minutes in the past: ''A few minutes ago''&lt;br /&gt;
* Less than 1 hour in the past: ''An hour ago''&lt;br /&gt;
* Less than 23 Hours in the past: ''Some hours ago''&lt;br /&gt;
* Less than 1 day in the past: ''Yesterday''&lt;br /&gt;
* More than 1 day in the past: The ''DateTime'' value formatted according to the device's localization rules.&lt;br /&gt;
* Not interpretable: ''???''&lt;br /&gt;
|- &lt;br /&gt;
| DebugConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Object || Object || || &lt;br /&gt;
A converter returning the given value for '''debug reasons'''.&lt;br /&gt;
|- &lt;br /&gt;
| DistanceToStringConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Double || || &lt;br /&gt;
Returns the given value interpreted as '''length'''. Values are returned in kilometers with two comma digits (e.g. 2.84km), values smaller than 1km are returned as meters and ''NaN'' will be returned as ''infinity''. If the value cannot be interpreted, an empty string will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| EqualityToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object,&amp;lt;br/&amp;gt;String || Object,&amp;lt;br/&amp;gt;String || &lt;br /&gt;
Returns ''true'' if the given value and parameter are '''equal to each other''', ''false'' otherwise.&lt;br /&gt;
|- &lt;br /&gt;
| EqualityToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object,&amp;lt;br/&amp;gt;String || Object,&amp;lt;br/&amp;gt;String || &lt;br /&gt;
Returns ''true'' if the given value and parameter are '''not equal to each other''', ''false'' otherwise.&lt;br /&gt;
|- &lt;br /&gt;
| SelectionChangedEventArgsConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || [https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.selectionchangedeventargs List&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs] || [https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs.html Item&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs] || || &lt;br /&gt;
Converts an Syncfusion '''[https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs.html Item&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs]''' to a '''[https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.selectionchangedeventargs List&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs]'''. &amp;lt;br/&amp;gt;The use-case of this converter is highly specific.&lt;br /&gt;
|- &lt;br /&gt;
| FilterCriterionToValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || String || FilterCriterion || || &lt;br /&gt;
Converts a [[Property_Based_Content_Filters|'''FilterCriterion''']] to its value. The functionality is similar to UWP's FilterCriterionToValueConverter.&lt;br /&gt;
|- &lt;br /&gt;
| GuidPropertyValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || String || Guid || Binding, where source is ContentViewModel || &lt;br /&gt;
Returns the '''first item''' of the parameter's ''Source-ViewModel'' that '''matches the given GUID''' value. If none is found, ''null'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| IntToColorConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Color || Integer || || &lt;br /&gt;
Converts an ARGB '''integer''' value to a '''color'''. If the value cannot be interpreted, the converter tries to parse the parameter as a ''color'' to return it. If everything fails, ''transparent'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| ItemCountToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Integer || Integer || &lt;br /&gt;
This converter has a '''property''' to set the '''boolean return value''', called ''LesserOrEqualReturnValue''. This property-value will be returned if the given value is '''smaller than or equal to''' the threshold (parameter, defaults to 0). If the value is '''bigger than''' the threshold, the '''inverted''' ''LesserOrEqualReturnValue'' will be returned.&amp;lt;br/&amp;gt;&lt;br /&gt;
In any other case (like the value cannot be interpreted), ''false'' is returned, so it's a good idea to set the converter's property in a way that the return is only ''true'' if you need it.&lt;br /&gt;
|- &lt;br /&gt;
| ItemCountToOverflowConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Integer || Integer || Creates a '''human-readable text''' indicating '''how many items are available'''. The value will be interpreted as the '''total item count''' and the parameter as '''overflow threshold''' (defaults to 99). &amp;lt;br/&amp;gt;If there are more items than the overflow, the overflow value with a + sign will be returned (e.g. 99+). If not, the value itself will be returned. If everything fails, ''null'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| NullToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Object,&amp;lt;br/&amp;gt;String|| || &lt;br /&gt;
''Null'' or an '''empty string''' value get converted to ''true'', and everything else to ''false''.&lt;br /&gt;
|- &lt;br /&gt;
| NullToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Object,&amp;lt;br/&amp;gt;String || || &lt;br /&gt;
''Null'' or an '''empty string''' value get converted to ''false'', and everything else to ''true''.&lt;br /&gt;
|- &lt;br /&gt;
| PathToImageSourceValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Image Source || String || || &lt;br /&gt;
Reads the '''path''' provided as parameter and creates an '''image source''' from it.&lt;br /&gt;
|- &lt;br /&gt;
| PercentageToProgressConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Double || Integer,&amp;lt;br/&amp;gt;Double || || &lt;br /&gt;
The '''numeric value'''  (int or double), interpreted as '''percentage from 0 to 100''', get converted to a '''progress level'''  (0 to 1). Values outside this range will be contained.&lt;br /&gt;
|- &lt;br /&gt;
| PropertyNameExistsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean (Nullable) || ContentViewModel,&amp;lt;br/&amp;gt;IContent || || &lt;br /&gt;
Converts a property to a '''boolean''' based on its '''existence'''. If it exists, ''true'' will be returned, else ''false'' or ''null'' (if something couldn't be properly interpreted).&lt;br /&gt;
|- &lt;br /&gt;
| PropertyNameExistsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean (Nullable) || ContentViewModel,&amp;lt;br/&amp;gt;IContent || || &lt;br /&gt;
Converts a property to a '''boolean''' based on its '''existence'''. If it exists, ''false'' will be returned, else ''true'' or ''null'' (if something couldn't be properly interpreted).&lt;br /&gt;
|- &lt;br /&gt;
| RootAreaTemplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ContentView || Object || || &lt;br /&gt;
If the provided value is '''not null''', the '''UBIKRootArea template''' will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| SelectiveItemToValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean,&amp;lt;br/&amp;gt;String,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;Double,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;FileReferenceData,&amp;lt;br/&amp;gt;GeoData,&amp;lt;br/&amp;gt;Object || Boolean,&amp;lt;br/&amp;gt;String,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;Double,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;FileReferenceData,&amp;lt;br/&amp;gt;GeoData,&amp;lt;br/&amp;gt;Object || Binding, where source is ContentViewModel || &lt;br /&gt;
Converts a '''item''' of a '''selective list''' to its value. If none is found, the passed ''value'' will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| SelectiveListToItemsConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || List of PropertyItems  || IPropertyItem || || &lt;br /&gt;
Returns all items from a selective list.&lt;br /&gt;
|- &lt;br /&gt;
| SfDataSourceConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || DataSource (for ListView) || Double || String (Expression) || &lt;br /&gt;
It's an advanced converter used for '''loading items''' and '''applying filters''' on it. It replaces to ''CollectionToViewConverter'' from the WinX.UWP project. The data source can be directly used with a ''[https://help.syncfusion.com/xamarin/sflistview/overview SfListView]''.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''This converter is obsolete!'''&amp;lt;br/&amp;gt;Use '''SfDataSourceExt''' (see [[#Data Source|Data Source]]) instead!&lt;br /&gt;
|- &lt;br /&gt;
| StringContainsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String || String || &lt;br /&gt;
Returns a '''boolean''' indicating whether the parameter string is included in the value string.&lt;br /&gt;
|- &lt;br /&gt;
| StringContainsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String || String || &lt;br /&gt;
Same as the ''StringContainsToBoolConverter'' but with '''inverted output'''.&lt;br /&gt;
|- &lt;br /&gt;
| StringFormatConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Object || String || Allows the creation of a '''nicely formatted ''string'' message''', similar to [https://docs.microsoft.com/en-us/dotnet/api/system.string.format C#'s String.Format method].&amp;lt;br/&amp;gt;The value will be interpreted as the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; element, and the parameter is the template string (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;The total count is: {0}!&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Up to two additional parameters, named ''Parameter1'' and ''Parameter2'', can be defined at the converter declaration. Adding formatting options to the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; notation is not possible.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Attention''', using the native '''[https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/string-formatting StringFormat]''' option is not only faster, but it also offers more customizability of the value!&amp;lt;br/&amp;gt;&lt;br /&gt;
You might still want to use the ''StringFormatConverter'' in rare cases, though!&lt;br /&gt;
|- &lt;br /&gt;
| ToStringFormatConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Double,&amp;lt;br/&amp;gt;Float,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;String || String || Converts '''primitives''' or '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' to string and allows the application of '''[https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings formatting options]''' (as parameter). &amp;lt;br/&amp;gt;Adding a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; to the end of the format-parameter allows '''[https://docs.microsoft.com/en-us/dotnet/api/system.math.truncate truncation]''' of all decimal places.&lt;br /&gt;
|-&lt;br /&gt;
| ToTypeConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Object || Object || String || Attempts to convert value to the Type specified in parameter, returning the value.&lt;br /&gt;
|- &lt;br /&gt;
| TypeNameToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object || String || Returns ''true'' if the type name of the value is present in the parameter-string (seperated by &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
|- &lt;br /&gt;
| TypeNameToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object || String || Inverted ''TypeNameTo&amp;lt;wbr/&amp;gt;BoolConverter''.&lt;br /&gt;
|- &lt;br /&gt;
| DataTemplateItemTemplateSelectorConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ChildItem&amp;lt;wbr/&amp;gt;Template&amp;lt;wbr/&amp;gt;Selector || String || String || Chooses what '''ChildItem&amp;lt;wbr/&amp;gt;Template&amp;lt;wbr/&amp;gt;Selector''' to return. Having a parameter with the content &amp;quot;Small&amp;quot; returns the small item template selector.&lt;br /&gt;
|- &lt;br /&gt;
| DataTemplateItemsPanelConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ItemsPanelTemplate || Query&amp;lt;wbr/&amp;gt;Details&amp;lt;wbr/&amp;gt;Page&amp;lt;wbr/&amp;gt;ViewModel || || Chooses what '''ItemPanel&amp;lt;wbr/&amp;gt;Template''' to return. Having a parameter with the content &amp;quot;Small&amp;quot; returns the small item template selector.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client | XAML | Xamarin]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Converters In Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Converters In Xamarin]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Converters_In_Mobile&amp;diff=23498</id>
		<title>Converters In Mobile</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Converters_In_Mobile&amp;diff=23498"/>
				<updated>2022-02-14T12:57:40Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* List of Available Converters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''See also: [[XAML#Converters|Converters in UWP/WinX]]''&lt;br /&gt;
&lt;br /&gt;
'''Converters''' are used to prepare application data to format a UI defined by a XAML markup. These converters make it possible to show elements only when specific conditions (like data being available) are met. This allows the creation of a good UI with XAML code only, improving code readability while also decreasing code complexity.&lt;br /&gt;
&lt;br /&gt;
This page explains how to properly use converters for customizing the UBIK Xamarin User Interface. Furthermore, all available converters are listed to provide a good reference.&lt;br /&gt;
&lt;br /&gt;
= Definition =&lt;br /&gt;
In Xamarin, before converters can be used, they need to be defined in the page's ''Resources'' tag. Make sure to include the &amp;lt;code&amp;gt;UBIK.CPL.Converters&amp;lt;/code&amp;gt; namespace in the namespace definitions!&lt;br /&gt;
The following example shows how the &amp;lt;code&amp;gt;NullToBoolConverter&amp;lt;/code&amp;gt; can be defined:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:converters=&amp;quot;clr-namespace:UBIK.CPL.Converters;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;converters:NullToBoolConverter x:Key=&amp;quot;NullToBool&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Cuztomizing --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The key ''NullToBool'' makes this converter accessible from the customizing in this page.&lt;br /&gt;
== Definition With Properties ==&lt;br /&gt;
In the following example, which is the same example from above, the '''StringFormatConverter''' will be additionally defined. To add more formatting possibilities, it has two extra properties, which need to be prefilled during initialization. Henceforth, these properties can be prefilled with static values or with static references.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:converters=&amp;quot;clr-namespace:UBIK.CPL.Converters;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;converters:NullToBoolConverter x:Key=&amp;quot;NullToBool&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;converters:StringFormatConverter x:Key=&amp;quot;Formatter&amp;quot; Parameter1=&amp;quot;5&amp;quot; Parameter2=&amp;quot;{Binding Children.Items.Count}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Cuztomizing --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Whereever this converter is used within the file it was defined in, ''Formatter'' will always have its ''Parameter1'' set to ''5'' and its ''Parameter2'' to the number of children of the currently viewed UBIK object. If this behavior is not intended, consider defining another ''StringFormatConverter'' with a '''different Key''' in the same way as shown above.&amp;lt;br/&amp;gt;&lt;br /&gt;
See below to find out how to use this converter!&lt;br /&gt;
= Usage =&lt;br /&gt;
A converter can only be used in conjunction with a &amp;lt;code&amp;gt;{Binding}&amp;lt;/code&amp;gt;. The following is an easy example, showing how the ''NullToBool'' converter, defined above, can be used.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;My Text&amp;quot; IsVisible=&amp;quot;{Binding MyBindableProperty, Converter={StaticResource NullToBool}}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If '''MyBindableProperty''' is ''null'' or an empty string, the converter will return '''true''', making the Label visible!&lt;br /&gt;
== Parameter ==&lt;br /&gt;
Some converters accept a '''ConverterParameter''', that passes additional information. Closely read the description of the available converters to find out which accept or even require a parameter to work properly. In Ubik, some converters accept a string parameter, consisting of multiple individual parameters separated by &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
An example of this behavior is the '''ContainsToBoolConverter''', which checks if the current value is contained within a collection of values (passed as the ''parameter''):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;My Text&amp;quot; IsVisible=&amp;quot;{Binding MyValue, Converter={StaticResource ContainsToBool}, ConverterParameter=1|2|3|4|5|6|7|8|9}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The label will only be visible if the ''MyValue'' property (which is expected to parse as an Integer in this example) is one of the values of the parameter.&amp;lt;br/&amp;gt;&lt;br /&gt;
Again, to get the converter working, don't forget to define it in the page's resources!&lt;br /&gt;
&lt;br /&gt;
== FallbackValue ==&lt;br /&gt;
In some rare cases, a converter might not return anything desired (like ''null'') if some condition doesn't work out as it should (e.g. ''value'' is ''null''). To still be able to get a usable return value, it's possible to define a '''FallbackValue'''.&lt;br /&gt;
&lt;br /&gt;
== Example Usage of StringFormatConverter ==&lt;br /&gt;
This converter can take up to two additional parameters during definition. Please see [[#Definition With Properties|Definition With Properties]] for more information!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;{Binding MyValue, Converter={StaticResource Formatter}, ConverterParameter=The Value of my value is \{0\}\, compared to \{1\} and \{2\}!}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It's important to note that special characters, like &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;,&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, need to be escaped using a &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, else the expression will be wrongly interpreted (and nothing happens)!&lt;br /&gt;
&lt;br /&gt;
The text of the '''ConverterParameter''' will be analyzed, and any occurrance (including duplicates) of &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{1}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{2}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; replaced with the '''binding value''', '''Formatter.Parameter1''' and '''Formatter.Parameter2''' respectively!&lt;br /&gt;
&lt;br /&gt;
Make sure to note, that Xamarin Forms has a native '''[https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/string-formatting StringFormat]''' option as well, that is probably way faster than using a converter for it. Furthermore, it supports formatting options!&lt;br /&gt;
&lt;br /&gt;
= Data Source =&lt;br /&gt;
Although technically not a converter, the '''SfDataSourceExt''' control is currently on the way of replacing the '''SfDataSourceConverter''', due to improved performance.&lt;br /&gt;
The usage is pretty simple: Similar to the converters, it needs to be defined in the '''Page Resources'''. Then, a '''Key''' and '''Expression''', as well as an '''ItemsSource''' have to be defined. Last, but not least, the the converter can be used within the '''ItemsSource''' property of a Syncfusion '''SfListView'''. See the following example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
             &amp;lt;controls:SfDataSourceExt&lt;br /&gt;
                x:Key=&amp;quot;MyDataSource&amp;quot;&lt;br /&gt;
                ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot;&lt;br /&gt;
                Expression=&amp;quot;Item.Content.MetaUID.ToString().ToLower()==&amp;amp;quot;85a50533-3817-4a0b-84cd-615b48b62565&amp;amp;quot; &amp;amp;amp;&amp;amp;amp; Item[&amp;amp;quot;ORGA_STATUS&amp;amp;quot;]!=100&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    &amp;lt;sync:SfListView&lt;br /&gt;
           x:Name=&amp;quot;ListView1&amp;quot;&lt;br /&gt;
           AllowSwiping=&amp;quot;True&amp;quot;&lt;br /&gt;
           ItemSize=&amp;quot;60&amp;quot;&lt;br /&gt;
           ItemTemplate=&amp;quot;{StaticResource ChildTemplateSelector}&amp;quot;&lt;br /&gt;
           ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource MyDataSource}}&amp;quot;&lt;br /&gt;
           LeftSwipeTemplate=&amp;quot;{StaticResource SwipeLeftTemplateSelector}&amp;quot;&lt;br /&gt;
           RightSwipeTemplate=&amp;quot;{StaticResource SwipeRightTemplateSelector}&amp;quot;&lt;br /&gt;
           SelectionMode=&amp;quot;None&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Thanks to the given expression, filtering is applied once the data source is evaluated. It's important to have [https://www.advancedinstaller.com/user-guide/xml-escaped-chars.html XML special characters] correctly escaped, like the example shows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= List of Available Converters =&lt;br /&gt;
The following list contains all currently available converters for UBIK Xamarin customizing. &lt;br /&gt;
&lt;br /&gt;
'''Two-way''' converters can be used with two-way bindings, e.g. a text-box displaying an editable value. If the value updates in the model, the text-box text changes. If the user edits the value, the value in the model behind also gets updated.&lt;br /&gt;
As a clarification, '''Value''' refers to the '''Binding Value''', and '''parameter''' to the '''ConverterParameter'''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Converter !! 2-Way !! Output Type || Input Type || Parameter Type || Description &lt;br /&gt;
|-&lt;br /&gt;
| BooleanConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Boolean, String || || &lt;br /&gt;
Interprets a '''boolean value''' or a '''String value''' and returns it. If the value cannot be interpreted, ''false'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| BooleanInvertConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Boolean || || &lt;br /&gt;
Interprets a '''boolean value''' or a '''String value''' and converts it into its '''inverted value'''. If the value cannot be interpreted, ''false'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| BooleanToFontAttributeConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || FontAttribute || Boolean || || &lt;br /&gt;
Converts a '''boolean''' into a '''[https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.fontattributes?view=xamarin-forms font attribute]''' value. In detail, if the value is ''true'', the parameter is interpreted (''Bold'', ''Italic'', ''None'') and returned. The default returned font-attribute is ''None''.&lt;br /&gt;
|- &lt;br /&gt;
| ByteToImageSourceValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ImageSource || Byte[ ],&amp;lt;br/&amp;gt;Byte Stream || || &lt;br /&gt;
Converts a '''byte stream''' value into an '''image source'''.&lt;br /&gt;
|- &lt;br /&gt;
| ChildAreaTemplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Child&amp;lt;wbr/&amp;gt;Area&amp;lt;wbr/&amp;gt;Template || Content&amp;lt;wbr/&amp;gt;ViewModel || || &lt;br /&gt;
Returns a '''ChildAreaTemplate''' from a '''Content&amp;lt;wbr/&amp;gt;ViewModel''' or ''null'' if the ViewModel cannot be interpreted.&lt;br /&gt;
|- &lt;br /&gt;
| ChildItem&amp;lt;wbr/&amp;gt;SelectionMode&amp;lt;wbr/&amp;gt;To&amp;lt;wbr/&amp;gt;SfListView&amp;lt;wbr/&amp;gt;SelectionMode&amp;lt;wbr/&amp;gt;Converter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || [https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.SfListView~SelectionMode.html ListView&amp;lt;wbr/&amp;gt;SelectionMode] || ChildItem&amp;lt;wbr/&amp;gt;SelectionMode || || &lt;br /&gt;
Converts a '''ChildItem&amp;lt;wbr/&amp;gt;SelectionMode''' to a Syncfusion '''[https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.SfListView~SelectionMode.html ListView&amp;lt;wbr/&amp;gt;SelectionMode]'''. Default is &amp;quot;Single&amp;quot;.&lt;br /&gt;
|- &lt;br /&gt;
| ClassificationToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || ContentViewModel || || &lt;br /&gt;
Returns a '''boolean''' indicating whether the given '''ContentViewModel''' is successfully classified.&lt;br /&gt;
|- &lt;br /&gt;
| ContainsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;Object || || &lt;br /&gt;
Checks if the delivered value is '''contained''' within a collection of values (delivered in the parameter, seperated with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;). If the value is contained, ''true'' will be returned, else ''false''. The functionality is similar to the ''ContainsToVisibilityConverter'' in the WinX project.&lt;br /&gt;
|- &lt;br /&gt;
| ContainsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;Object || || &lt;br /&gt;
Same as the ''ContainsToBoolConverter'', but with '''inverted output'''.&lt;br /&gt;
|- &lt;br /&gt;
| ContentAreaTeamplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || UBIKContentArea || ContentViewModel || || This converter is '''not yet finished''' and just returns the ''UBIKContentArea'' if the value is a ''ContentViewModel''.&lt;br /&gt;
|- &lt;br /&gt;
| StringToDateTimeTypesConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓  || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime], [https://docs.microsoft.com/en-us/dotnet/api/system.timespan TimeSpan] || String || || &lt;br /&gt;
Converts a String to the correct DateType, which can be either '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' or '''[https://docs.microsoft.com/en-us/dotnet/api/system.timespan TimeSpan]'''. If the value cannot be interpreted, the unchanged String value is returned.&lt;br /&gt;
|- &lt;br /&gt;
| DateTimeOffsetToDateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime] || [https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset DateTimeOffset] || || &lt;br /&gt;
Converts a '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset DateTimeOffset]''' to the correct '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''', applied to the current date and time. If the value cannot be interpreted, a new ''DateTime'', generated from the device's current time (&amp;lt;code&amp;gt;DateTime.Now&amp;lt;/code&amp;gt;) is returned.&lt;br /&gt;
|- &lt;br /&gt;
| DateTimeToFromNowStringConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime] || || &lt;br /&gt;
Returns a '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' into a human-readable and easily understandable ''string message'' (the last applying one will be taken):&lt;br /&gt;
* Less than 5 minutes in the past: ''Just now''&lt;br /&gt;
* Less than 10 minutes in the past: ''A few minutes ago''&lt;br /&gt;
* Less than 1 hour in the past: ''An hour ago''&lt;br /&gt;
* Less than 23 Hours in the past: ''Some hours ago''&lt;br /&gt;
* Less than 1 day in the past: ''Yesterday''&lt;br /&gt;
* More than 1 day in the past: The ''DateTime'' value formatted according to the device's localization rules.&lt;br /&gt;
* Not interpretable: ''???''&lt;br /&gt;
|- &lt;br /&gt;
| DebugConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Object || Object || || &lt;br /&gt;
A converter returning the given value for '''debug reasons'''.&lt;br /&gt;
|- &lt;br /&gt;
| DistanceToStringConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Double || || &lt;br /&gt;
Returns the given value interpreted as '''length'''. Values are returned in kilometers with two comma digits (e.g. 2.84km), values smaller than 1km are returned as meters and ''NaN'' will be returned as ''infinity''. If the value cannot be interpreted, an empty string will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| EqualityToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object,&amp;lt;br/&amp;gt;String || Object,&amp;lt;br/&amp;gt;String || &lt;br /&gt;
Returns ''true'' if the given value and parameter are '''equal to each other''', ''false'' otherwise.&lt;br /&gt;
|- &lt;br /&gt;
| EqualityToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object,&amp;lt;br/&amp;gt;String || Object,&amp;lt;br/&amp;gt;String || &lt;br /&gt;
Returns ''true'' if the given value and parameter are '''not equal to each other''', ''false'' otherwise.&lt;br /&gt;
|- &lt;br /&gt;
| SelectionChangedEventArgsConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || [https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.selectionchangedeventargs List&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs] || [https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs.html Item&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs] || || &lt;br /&gt;
Converts an Syncfusion '''[https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs.html Item&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs]''' to a '''[https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.selectionchangedeventargs List&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs]'''. &amp;lt;br/&amp;gt;The use-case of this converter is highly specific.&lt;br /&gt;
|- &lt;br /&gt;
| FilterCriterionToValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || String || FilterCriterion || || &lt;br /&gt;
Converts a [[Property_Based_Content_Filters|'''FilterCriterion''']] to its value. The functionality is similar to UWP's FilterCriterionToValueConverter.&lt;br /&gt;
|- &lt;br /&gt;
| GuidPropertyValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || String || Guid || Binding, where source is ContentViewModel || &lt;br /&gt;
Returns the '''first item''' of the parameter's ''Source-ViewModel'' that '''matches the given GUID''' value. If none is found, ''null'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| IntToColorConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Color || Integer || || &lt;br /&gt;
Converts an ARGB '''integer''' value to a '''color'''. If the value cannot be interpreted, the converter tries to parse the parameter as a ''color'' to return it. If everything fails, ''transparent'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| ItemCountToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Integer || Integer || &lt;br /&gt;
This converter has a '''property''' to set the '''boolean return value''', called ''LesserOrEqualReturnValue''. This property-value will be returned if the given value is '''smaller than or equal to''' the threshold (parameter, defaults to 0). If the value is '''bigger than''' the threshold, the '''inverted''' ''LesserOrEqualReturnValue'' will be returned.&amp;lt;br/&amp;gt;&lt;br /&gt;
In any other case (like the value cannot be interpreted), ''false'' is returned, so it's a good idea to set the converter's property in a way that the return is only ''true'' if you need it.&lt;br /&gt;
|- &lt;br /&gt;
| ItemCountToOverflowConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Integer || Integer || Creates a '''human-readable text''' indicating '''how many items are available'''. The value will be interpreted as the '''total item count''' and the parameter as '''overflow threshold''' (defaults to 99). &amp;lt;br/&amp;gt;If there are more items than the overflow, the overflow value with a + sign will be returned (e.g. 99+). If not, the value itself will be returned. If everything fails, ''null'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| NullToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Object,&amp;lt;br/&amp;gt;String|| || &lt;br /&gt;
''Null'' or an '''empty string''' value get converted to ''true'', and everything else to ''false''.&lt;br /&gt;
|- &lt;br /&gt;
| NullToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Object,&amp;lt;br/&amp;gt;String || || &lt;br /&gt;
''Null'' or an '''empty string''' value get converted to ''false'', and everything else to ''true''.&lt;br /&gt;
|- &lt;br /&gt;
| PathToImageSourceValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Image Source || String || || &lt;br /&gt;
Reads the '''path''' provided as parameter and creates an '''image source''' from it.&lt;br /&gt;
|- &lt;br /&gt;
| PercentageToProgressConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Double || Integer,&amp;lt;br/&amp;gt;Double || || &lt;br /&gt;
The '''numeric value'''  (int or double), interpreted as '''percentage from 0 to 100''', get converted to a '''progress level'''  (0 to 1). Values outside this range will be contained.&lt;br /&gt;
|- &lt;br /&gt;
| PropertyNameExistsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean (Nullable) || ContentViewModel,&amp;lt;br/&amp;gt;IContent || || &lt;br /&gt;
Converts a property to a '''boolean''' based on its '''existence'''. If it exists, ''true'' will be returned, else ''false'' or ''null'' (if something couldn't be properly interpreted).&lt;br /&gt;
|- &lt;br /&gt;
| PropertyNameExistsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean (Nullable) || ContentViewModel,&amp;lt;br/&amp;gt;IContent || || &lt;br /&gt;
Converts a property to a '''boolean''' based on its '''existence'''. If it exists, ''false'' will be returned, else ''true'' or ''null'' (if something couldn't be properly interpreted).&lt;br /&gt;
|- &lt;br /&gt;
| RootAreaTemplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ContentView || Object || || &lt;br /&gt;
If the provided value is '''not null''', the '''UBIKRootArea template''' will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| SelectiveItemToValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean,&amp;lt;br/&amp;gt;String,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;Double,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;FileReferenceData,&amp;lt;br/&amp;gt;GeoData,&amp;lt;br/&amp;gt;Object || Boolean,&amp;lt;br/&amp;gt;String,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;Double,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;FileReferenceData,&amp;lt;br/&amp;gt;GeoData,&amp;lt;br/&amp;gt;Object || Binding, where source is ContentViewModel || &lt;br /&gt;
Converts a '''item''' of a '''selective list''' to its value. If none is found, the passed ''value'' will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| SelectiveListToItemsConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || List of PropertyItems  || IPropertyItem || || &lt;br /&gt;
Returns all items from a selective list.&lt;br /&gt;
|- &lt;br /&gt;
| SfDataSourceConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || DataSource (for ListView) || Double || String (Expression) || &lt;br /&gt;
It's an advanced converter used for '''loading items''' and '''applying filters''' on it. It replaces to ''CollectionToViewConverter'' from the WinX.UWP project. The data source can be directly used with a ''[https://help.syncfusion.com/xamarin/sflistview/overview SfListView]''.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''This converter is obsolete!'''&amp;lt;br/&amp;gt;Use '''SfDataSourceExt''' (see [[#Data Source|Data Source]]) instead!&lt;br /&gt;
|- &lt;br /&gt;
| StringContainsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String || String || &lt;br /&gt;
Returns a '''boolean''' indicating whether the parameter string is included in the value string.&lt;br /&gt;
|- &lt;br /&gt;
| StringContainsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String || String || &lt;br /&gt;
Same as the ''StringContainsToBoolConverter'' but with '''inverted output'''.&lt;br /&gt;
|- &lt;br /&gt;
| StringFormatConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Object || String || Allows the creation of a '''nicely formatted ''string'' message''', similar to [https://docs.microsoft.com/en-us/dotnet/api/system.string.format C#'s String.Format method].&amp;lt;br/&amp;gt;The value will be interpreted as the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; element, and the parameter is the template string (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;The total count is: {0}!&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Up to two additional parameters, named ''Parameter1'' and ''Parameter2'', can be defined at the converter declaration. Adding formatting options to the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; notation is not possible.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Attention''', using the native '''[https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/string-formatting StringFormat]''' option is not only faster, but it also offers more customizability of the value!&amp;lt;br/&amp;gt;&lt;br /&gt;
You might still want to use the ''StringFormatConverter'' in rare cases, though!&lt;br /&gt;
|- &lt;br /&gt;
| ToStringFormatConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Double,&amp;lt;br/&amp;gt;Float,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;String || String || Converts '''primitives''' or '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' to string and allows the application of '''[https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings formatting options]''' (as parameter). &amp;lt;br/&amp;gt;Adding a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; to the end of the format-parameter allows '''[https://docs.microsoft.com/en-us/dotnet/api/system.math.truncate truncation]''' of all decimal places.&lt;br /&gt;
|-&lt;br /&gt;
| ToTypeConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Object || Object || String || Attempts to convert value to the Type specified in parameter, returning the value.&lt;br /&gt;
|- &lt;br /&gt;
| TypeNameToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object || String || Returns ''true'' if the type name of the value is present in the parameter-string (seperated by &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
|- &lt;br /&gt;
| TypeNameToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object || String || Inverted ''TypeNameTo&amp;lt;wbr/&amp;gt;BoolConverter''.&lt;br /&gt;
|- &lt;br /&gt;
| DataTemplateItemTemplateSelectorConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ChildItem&amp;lt;wbr/&amp;gt;Template&amp;lt;wbr/&amp;gt;Selector || String || String || Chooses what '''ChildItem&amp;lt;wbr/&amp;gt;Template&amp;lt;wbr/&amp;gt;Selector''' to return. Having a parameter with the content &amp;quot;Small&amp;quot; returns the small item template selector.&lt;br /&gt;
|- &lt;br /&gt;
| DataTemplateItemsPanelConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ItemsPanelTemplate || Query&amp;lt;wbr/&amp;gt;Details&amp;lt;wbr/&amp;gt;Page&amp;lt;wbr/&amp;gt;ViewModel || || Chooses what '''ItemPanel&amp;lt;wbr/&amp;gt;Template''' to return. Having a parameter with the content &amp;quot;Small&amp;quot; returns the small item template selector.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client | XAML | Xamarin]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Converters In Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Converters In Xamarin]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Converters_In_Mobile&amp;diff=23497</id>
		<title>Converters In Mobile</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Converters_In_Mobile&amp;diff=23497"/>
				<updated>2022-02-14T08:22:50Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* List of Available Converters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''See also: [[XAML#Converters|Converters in UWP/WinX]]''&lt;br /&gt;
&lt;br /&gt;
'''Converters''' are used to prepare application data to format a UI defined by a XAML markup. These converters make it possible to show elements only when specific conditions (like data being available) are met. This allows the creation of a good UI with XAML code only, improving code readability while also decreasing code complexity.&lt;br /&gt;
&lt;br /&gt;
This page explains how to properly use converters for customizing the UBIK Xamarin User Interface. Furthermore, all available converters are listed to provide a good reference.&lt;br /&gt;
&lt;br /&gt;
= Definition =&lt;br /&gt;
In Xamarin, before converters can be used, they need to be defined in the page's ''Resources'' tag. Make sure to include the &amp;lt;code&amp;gt;UBIK.CPL.Converters&amp;lt;/code&amp;gt; namespace in the namespace definitions!&lt;br /&gt;
The following example shows how the &amp;lt;code&amp;gt;NullToBoolConverter&amp;lt;/code&amp;gt; can be defined:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:converters=&amp;quot;clr-namespace:UBIK.CPL.Converters;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;converters:NullToBoolConverter x:Key=&amp;quot;NullToBool&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Cuztomizing --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The key ''NullToBool'' makes this converter accessible from the customizing in this page.&lt;br /&gt;
== Definition With Properties ==&lt;br /&gt;
In the following example, which is the same example from above, the '''StringFormatConverter''' will be additionally defined. To add more formatting possibilities, it has two extra properties, which need to be prefilled during initialization. Henceforth, these properties can be prefilled with static values or with static references.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:converters=&amp;quot;clr-namespace:UBIK.CPL.Converters;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;converters:NullToBoolConverter x:Key=&amp;quot;NullToBool&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;converters:StringFormatConverter x:Key=&amp;quot;Formatter&amp;quot; Parameter1=&amp;quot;5&amp;quot; Parameter2=&amp;quot;{Binding Children.Items.Count}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Cuztomizing --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Whereever this converter is used within the file it was defined in, ''Formatter'' will always have its ''Parameter1'' set to ''5'' and its ''Parameter2'' to the number of children of the currently viewed UBIK object. If this behavior is not intended, consider defining another ''StringFormatConverter'' with a '''different Key''' in the same way as shown above.&amp;lt;br/&amp;gt;&lt;br /&gt;
See below to find out how to use this converter!&lt;br /&gt;
= Usage =&lt;br /&gt;
A converter can only be used in conjunction with a &amp;lt;code&amp;gt;{Binding}&amp;lt;/code&amp;gt;. The following is an easy example, showing how the ''NullToBool'' converter, defined above, can be used.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;My Text&amp;quot; IsVisible=&amp;quot;{Binding MyBindableProperty, Converter={StaticResource NullToBool}}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If '''MyBindableProperty''' is ''null'' or an empty string, the converter will return '''true''', making the Label visible!&lt;br /&gt;
== Parameter ==&lt;br /&gt;
Some converters accept a '''ConverterParameter''', that passes additional information. Closely read the description of the available converters to find out which accept or even require a parameter to work properly. In Ubik, some converters accept a string parameter, consisting of multiple individual parameters separated by &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
An example of this behavior is the '''ContainsToBoolConverter''', which checks if the current value is contained within a collection of values (passed as the ''parameter''):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;My Text&amp;quot; IsVisible=&amp;quot;{Binding MyValue, Converter={StaticResource ContainsToBool}, ConverterParameter=1|2|3|4|5|6|7|8|9}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The label will only be visible if the ''MyValue'' property (which is expected to parse as an Integer in this example) is one of the values of the parameter.&amp;lt;br/&amp;gt;&lt;br /&gt;
Again, to get the converter working, don't forget to define it in the page's resources!&lt;br /&gt;
&lt;br /&gt;
== FallbackValue ==&lt;br /&gt;
In some rare cases, a converter might not return anything desired (like ''null'') if some condition doesn't work out as it should (e.g. ''value'' is ''null''). To still be able to get a usable return value, it's possible to define a '''FallbackValue'''.&lt;br /&gt;
&lt;br /&gt;
== Example Usage of StringFormatConverter ==&lt;br /&gt;
This converter can take up to two additional parameters during definition. Please see [[#Definition With Properties|Definition With Properties]] for more information!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;{Binding MyValue, Converter={StaticResource Formatter}, ConverterParameter=The Value of my value is \{0\}\, compared to \{1\} and \{2\}!}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It's important to note that special characters, like &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;,&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, need to be escaped using a &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, else the expression will be wrongly interpreted (and nothing happens)!&lt;br /&gt;
&lt;br /&gt;
The text of the '''ConverterParameter''' will be analyzed, and any occurrance (including duplicates) of &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{1}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{2}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; replaced with the '''binding value''', '''Formatter.Parameter1''' and '''Formatter.Parameter2''' respectively!&lt;br /&gt;
&lt;br /&gt;
Make sure to note, that Xamarin Forms has a native '''[https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/string-formatting StringFormat]''' option as well, that is probably way faster than using a converter for it. Furthermore, it supports formatting options!&lt;br /&gt;
&lt;br /&gt;
= Data Source =&lt;br /&gt;
Although technically not a converter, the '''SfDataSourceExt''' control is currently on the way of replacing the '''SfDataSourceConverter''', due to improved performance.&lt;br /&gt;
The usage is pretty simple: Similar to the converters, it needs to be defined in the '''Page Resources'''. Then, a '''Key''' and '''Expression''', as well as an '''ItemsSource''' have to be defined. Last, but not least, the the converter can be used within the '''ItemsSource''' property of a Syncfusion '''SfListView'''. See the following example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
             &amp;lt;controls:SfDataSourceExt&lt;br /&gt;
                x:Key=&amp;quot;MyDataSource&amp;quot;&lt;br /&gt;
                ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot;&lt;br /&gt;
                Expression=&amp;quot;Item.Content.MetaUID.ToString().ToLower()==&amp;amp;quot;85a50533-3817-4a0b-84cd-615b48b62565&amp;amp;quot; &amp;amp;amp;&amp;amp;amp; Item[&amp;amp;quot;ORGA_STATUS&amp;amp;quot;]!=100&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    &amp;lt;sync:SfListView&lt;br /&gt;
           x:Name=&amp;quot;ListView1&amp;quot;&lt;br /&gt;
           AllowSwiping=&amp;quot;True&amp;quot;&lt;br /&gt;
           ItemSize=&amp;quot;60&amp;quot;&lt;br /&gt;
           ItemTemplate=&amp;quot;{StaticResource ChildTemplateSelector}&amp;quot;&lt;br /&gt;
           ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource MyDataSource}}&amp;quot;&lt;br /&gt;
           LeftSwipeTemplate=&amp;quot;{StaticResource SwipeLeftTemplateSelector}&amp;quot;&lt;br /&gt;
           RightSwipeTemplate=&amp;quot;{StaticResource SwipeRightTemplateSelector}&amp;quot;&lt;br /&gt;
           SelectionMode=&amp;quot;None&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Thanks to the given expression, filtering is applied once the data source is evaluated. It's important to have [https://www.advancedinstaller.com/user-guide/xml-escaped-chars.html XML special characters] correctly escaped, like the example shows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= List of Available Converters =&lt;br /&gt;
The following list contains all currently available converters for UBIK Xamarin customizing. &lt;br /&gt;
&lt;br /&gt;
'''Two-way''' converters can be used with two-way bindings, e.g. a text-box displaying an editable value. If the value updates in the model, the text-box text changes. If the user edits the value, the value in the model behind also gets updated.&lt;br /&gt;
As a clarification, '''Value''' refers to the '''Binding Value''', and '''parameter''' to the '''ConverterParameter'''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Converter !! 2-Way !! Output Type || Input Type || Parameter Type || Description &lt;br /&gt;
|-&lt;br /&gt;
| BooleanConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Boolean || || &lt;br /&gt;
Interprets the '''boolean value''' and returns it. If the value cannot be interpreted, ''false'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| BooleanInvertConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Boolean || || &lt;br /&gt;
Interprets and converts a '''boolean''' into its '''inverted value'''. If the value cannot be interpreted, ''false'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| BooleanToFontAttributeConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || FontAttribute || Boolean || || &lt;br /&gt;
Converts a '''boolean''' into a '''[https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.fontattributes?view=xamarin-forms font attribute]''' value. In detail, if the value is ''true'', the parameter is interpreted (''Bold'', ''Italic'', ''None'') and returned. The default returned font-attribute is ''None''.&lt;br /&gt;
|- &lt;br /&gt;
| ByteToImageSourceValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ImageSource || Byte[ ],&amp;lt;br/&amp;gt;Byte Stream || || &lt;br /&gt;
Converts a '''byte stream''' value into an '''image source'''.&lt;br /&gt;
|- &lt;br /&gt;
| ChildAreaTemplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Child&amp;lt;wbr/&amp;gt;Area&amp;lt;wbr/&amp;gt;Template || Content&amp;lt;wbr/&amp;gt;ViewModel || || &lt;br /&gt;
Returns a '''ChildAreaTemplate''' from a '''Content&amp;lt;wbr/&amp;gt;ViewModel''' or ''null'' if the ViewModel cannot be interpreted.&lt;br /&gt;
|- &lt;br /&gt;
| ChildItem&amp;lt;wbr/&amp;gt;SelectionMode&amp;lt;wbr/&amp;gt;To&amp;lt;wbr/&amp;gt;SfListView&amp;lt;wbr/&amp;gt;SelectionMode&amp;lt;wbr/&amp;gt;Converter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || [https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.SfListView~SelectionMode.html ListView&amp;lt;wbr/&amp;gt;SelectionMode] || ChildItem&amp;lt;wbr/&amp;gt;SelectionMode || || &lt;br /&gt;
Converts a '''ChildItem&amp;lt;wbr/&amp;gt;SelectionMode''' to a Syncfusion '''[https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.SfListView~SelectionMode.html ListView&amp;lt;wbr/&amp;gt;SelectionMode]'''. Default is &amp;quot;Single&amp;quot;.&lt;br /&gt;
|- &lt;br /&gt;
| ClassificationToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || ContentViewModel || || &lt;br /&gt;
Returns a '''boolean''' indicating whether the given '''ContentViewModel''' is successfully classified.&lt;br /&gt;
|- &lt;br /&gt;
| ContainsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;Object || || &lt;br /&gt;
Checks if the delivered value is '''contained''' within a collection of values (delivered in the parameter, seperated with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;). If the value is contained, ''true'' will be returned, else ''false''. The functionality is similar to the ''ContainsToVisibilityConverter'' in the WinX project.&lt;br /&gt;
|- &lt;br /&gt;
| ContainsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;Object || || &lt;br /&gt;
Same as the ''ContainsToBoolConverter'', but with '''inverted output'''.&lt;br /&gt;
|- &lt;br /&gt;
| ContentAreaTeamplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || UBIKContentArea || ContentViewModel || || This converter is '''not yet finished''' and just returns the ''UBIKContentArea'' if the value is a ''ContentViewModel''.&lt;br /&gt;
|- &lt;br /&gt;
| StringToDateTimeTypesConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓  || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime], [https://docs.microsoft.com/en-us/dotnet/api/system.timespan TimeSpan] || String || || &lt;br /&gt;
Converts a String to the correct DateType, which can be either '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' or '''[https://docs.microsoft.com/en-us/dotnet/api/system.timespan TimeSpan]'''. If the value cannot be interpreted, the unchanged String value is returned.&lt;br /&gt;
|- &lt;br /&gt;
| DateTimeOffsetToDateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime] || [https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset DateTimeOffset] || || &lt;br /&gt;
Converts a '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset DateTimeOffset]''' to the correct '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''', applied to the current date and time. If the value cannot be interpreted, a new ''DateTime'', generated from the device's current time (&amp;lt;code&amp;gt;DateTime.Now&amp;lt;/code&amp;gt;) is returned.&lt;br /&gt;
|- &lt;br /&gt;
| DateTimeToFromNowStringConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime] || || &lt;br /&gt;
Returns a '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' into a human-readable and easily understandable ''string message'' (the last applying one will be taken):&lt;br /&gt;
* Less than 5 minutes in the past: ''Just now''&lt;br /&gt;
* Less than 10 minutes in the past: ''A few minutes ago''&lt;br /&gt;
* Less than 1 hour in the past: ''An hour ago''&lt;br /&gt;
* Less than 23 Hours in the past: ''Some hours ago''&lt;br /&gt;
* Less than 1 day in the past: ''Yesterday''&lt;br /&gt;
* More than 1 day in the past: The ''DateTime'' value formatted according to the device's localization rules.&lt;br /&gt;
* Not interpretable: ''???''&lt;br /&gt;
|- &lt;br /&gt;
| DebugConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Object || Object || || &lt;br /&gt;
A converter returning the given value for '''debug reasons'''.&lt;br /&gt;
|- &lt;br /&gt;
| DistanceToStringConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Double || || &lt;br /&gt;
Returns the given value interpreted as '''length'''. Values are returned in kilometers with two comma digits (e.g. 2.84km), values smaller than 1km are returned as meters and ''NaN'' will be returned as ''infinity''. If the value cannot be interpreted, an empty string will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| EqualityToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object,&amp;lt;br/&amp;gt;String || Object,&amp;lt;br/&amp;gt;String || &lt;br /&gt;
Returns ''true'' if the given value and parameter are '''equal to each other''', ''false'' otherwise.&lt;br /&gt;
|- &lt;br /&gt;
| EqualityToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object,&amp;lt;br/&amp;gt;String || Object,&amp;lt;br/&amp;gt;String || &lt;br /&gt;
Returns ''true'' if the given value and parameter are '''not equal to each other''', ''false'' otherwise.&lt;br /&gt;
|- &lt;br /&gt;
| SelectionChangedEventArgsConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || [https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.selectionchangedeventargs List&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs] || [https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs.html Item&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs] || || &lt;br /&gt;
Converts an Syncfusion '''[https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs.html Item&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs]''' to a '''[https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.selectionchangedeventargs List&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs]'''. &amp;lt;br/&amp;gt;The use-case of this converter is highly specific.&lt;br /&gt;
|- &lt;br /&gt;
| FilterCriterionToValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || String || FilterCriterion || || &lt;br /&gt;
Converts a [[Property_Based_Content_Filters|'''FilterCriterion''']] to its value. The functionality is similar to UWP's FilterCriterionToValueConverter.&lt;br /&gt;
|- &lt;br /&gt;
| GuidPropertyValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || String || Guid || Binding, where source is ContentViewModel || &lt;br /&gt;
Returns the '''first item''' of the parameter's ''Source-ViewModel'' that '''matches the given GUID''' value. If none is found, ''null'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| IntToColorConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Color || Integer || || &lt;br /&gt;
Converts an ARGB '''integer''' value to a '''color'''. If the value cannot be interpreted, the converter tries to parse the parameter as a ''color'' to return it. If everything fails, ''transparent'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| ItemCountToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Integer || Integer || &lt;br /&gt;
This converter has a '''property''' to set the '''boolean return value''', called ''LesserOrEqualReturnValue''. This property-value will be returned if the given value is '''smaller than or equal to''' the threshold (parameter, defaults to 0). If the value is '''bigger than''' the threshold, the '''inverted''' ''LesserOrEqualReturnValue'' will be returned.&amp;lt;br/&amp;gt;&lt;br /&gt;
In any other case (like the value cannot be interpreted), ''false'' is returned, so it's a good idea to set the converter's property in a way that the return is only ''true'' if you need it.&lt;br /&gt;
|- &lt;br /&gt;
| ItemCountToOverflowConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Integer || Integer || Creates a '''human-readable text''' indicating '''how many items are available'''. The value will be interpreted as the '''total item count''' and the parameter as '''overflow threshold''' (defaults to 99). &amp;lt;br/&amp;gt;If there are more items than the overflow, the overflow value with a + sign will be returned (e.g. 99+). If not, the value itself will be returned. If everything fails, ''null'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| NullToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Object,&amp;lt;br/&amp;gt;String|| || &lt;br /&gt;
''Null'' or an '''empty string''' value get converted to ''true'', and everything else to ''false''.&lt;br /&gt;
|- &lt;br /&gt;
| NullToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Object,&amp;lt;br/&amp;gt;String || || &lt;br /&gt;
''Null'' or an '''empty string''' value get converted to ''false'', and everything else to ''true''.&lt;br /&gt;
|- &lt;br /&gt;
| PathToImageSourceValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Image Source || String || || &lt;br /&gt;
Reads the '''path''' provided as parameter and creates an '''image source''' from it.&lt;br /&gt;
|- &lt;br /&gt;
| PercentageToProgressConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Double || Integer,&amp;lt;br/&amp;gt;Double || || &lt;br /&gt;
The '''numeric value'''  (int or double), interpreted as '''percentage from 0 to 100''', get converted to a '''progress level'''  (0 to 1). Values outside this range will be contained.&lt;br /&gt;
|- &lt;br /&gt;
| PropertyNameExistsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean (Nullable) || ContentViewModel,&amp;lt;br/&amp;gt;IContent || || &lt;br /&gt;
Converts a property to a '''boolean''' based on its '''existence'''. If it exists, ''true'' will be returned, else ''false'' or ''null'' (if something couldn't be properly interpreted).&lt;br /&gt;
|- &lt;br /&gt;
| PropertyNameExistsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean (Nullable) || ContentViewModel,&amp;lt;br/&amp;gt;IContent || || &lt;br /&gt;
Converts a property to a '''boolean''' based on its '''existence'''. If it exists, ''false'' will be returned, else ''true'' or ''null'' (if something couldn't be properly interpreted).&lt;br /&gt;
|- &lt;br /&gt;
| RootAreaTemplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ContentView || Object || || &lt;br /&gt;
If the provided value is '''not null''', the '''UBIKRootArea template''' will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| SelectiveItemToValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean,&amp;lt;br/&amp;gt;String,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;Double,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;FileReferenceData,&amp;lt;br/&amp;gt;GeoData,&amp;lt;br/&amp;gt;Object || Boolean,&amp;lt;br/&amp;gt;String,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;Double,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;FileReferenceData,&amp;lt;br/&amp;gt;GeoData,&amp;lt;br/&amp;gt;Object || Binding, where source is ContentViewModel || &lt;br /&gt;
Converts a '''item''' of a '''selective list''' to its value. If none is found, the passed ''value'' will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| SelectiveListToItemsConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || List of PropertyItems  || IPropertyItem || || &lt;br /&gt;
Returns all items from a selective list.&lt;br /&gt;
|- &lt;br /&gt;
| SfDataSourceConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || DataSource (for ListView) || Double || String (Expression) || &lt;br /&gt;
It's an advanced converter used for '''loading items''' and '''applying filters''' on it. It replaces to ''CollectionToViewConverter'' from the WinX.UWP project. The data source can be directly used with a ''[https://help.syncfusion.com/xamarin/sflistview/overview SfListView]''.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''This converter is obsolete!'''&amp;lt;br/&amp;gt;Use '''SfDataSourceExt''' (see [[#Data Source|Data Source]]) instead!&lt;br /&gt;
|- &lt;br /&gt;
| StringContainsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String || String || &lt;br /&gt;
Returns a '''boolean''' indicating whether the parameter string is included in the value string.&lt;br /&gt;
|- &lt;br /&gt;
| StringContainsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String || String || &lt;br /&gt;
Same as the ''StringContainsToBoolConverter'' but with '''inverted output'''.&lt;br /&gt;
|- &lt;br /&gt;
| StringFormatConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Object || String || Allows the creation of a '''nicely formatted ''string'' message''', similar to [https://docs.microsoft.com/en-us/dotnet/api/system.string.format C#'s String.Format method].&amp;lt;br/&amp;gt;The value will be interpreted as the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; element, and the parameter is the template string (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;The total count is: {0}!&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Up to two additional parameters, named ''Parameter1'' and ''Parameter2'', can be defined at the converter declaration. Adding formatting options to the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; notation is not possible.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Attention''', using the native '''[https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/string-formatting StringFormat]''' option is not only faster, but it also offers more customizability of the value!&amp;lt;br/&amp;gt;&lt;br /&gt;
You might still want to use the ''StringFormatConverter'' in rare cases, though!&lt;br /&gt;
|- &lt;br /&gt;
| ToStringFormatConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Double,&amp;lt;br/&amp;gt;Float,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;String || String || Converts '''primitives''' or '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' to string and allows the application of '''[https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings formatting options]''' (as parameter). &amp;lt;br/&amp;gt;Adding a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; to the end of the format-parameter allows '''[https://docs.microsoft.com/en-us/dotnet/api/system.math.truncate truncation]''' of all decimal places.&lt;br /&gt;
|-&lt;br /&gt;
| ToTypeConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Object || Object || String || Attempts to convert value to the Type specified in parameter, returning the value.&lt;br /&gt;
|- &lt;br /&gt;
| TypeNameToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object || String || Returns ''true'' if the type name of the value is present in the parameter-string (seperated by &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
|- &lt;br /&gt;
| TypeNameToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object || String || Inverted ''TypeNameTo&amp;lt;wbr/&amp;gt;BoolConverter''.&lt;br /&gt;
|- &lt;br /&gt;
| DataTemplateItemTemplateSelectorConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ChildItem&amp;lt;wbr/&amp;gt;Template&amp;lt;wbr/&amp;gt;Selector || String || String || Chooses what '''ChildItem&amp;lt;wbr/&amp;gt;Template&amp;lt;wbr/&amp;gt;Selector''' to return. Having a parameter with the content &amp;quot;Small&amp;quot; returns the small item template selector.&lt;br /&gt;
|- &lt;br /&gt;
| DataTemplateItemsPanelConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ItemsPanelTemplate || Query&amp;lt;wbr/&amp;gt;Details&amp;lt;wbr/&amp;gt;Page&amp;lt;wbr/&amp;gt;ViewModel || || Chooses what '''ItemPanel&amp;lt;wbr/&amp;gt;Template''' to return. Having a parameter with the content &amp;quot;Small&amp;quot; returns the small item template selector.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client | XAML | Xamarin]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Converters In Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Converters In Xamarin]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Converters_In_Mobile&amp;diff=23496</id>
		<title>Converters In Mobile</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Converters_In_Mobile&amp;diff=23496"/>
				<updated>2022-02-11T12:11:58Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* List of Available Converters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''See also: [[XAML#Converters|Converters in UWP/WinX]]''&lt;br /&gt;
&lt;br /&gt;
'''Converters''' are used to prepare application data to format a UI defined by a XAML markup. These converters make it possible to show elements only when specific conditions (like data being available) are met. This allows the creation of a good UI with XAML code only, improving code readability while also decreasing code complexity.&lt;br /&gt;
&lt;br /&gt;
This page explains how to properly use converters for customizing the UBIK Xamarin User Interface. Furthermore, all available converters are listed to provide a good reference.&lt;br /&gt;
&lt;br /&gt;
= Definition =&lt;br /&gt;
In Xamarin, before converters can be used, they need to be defined in the page's ''Resources'' tag. Make sure to include the &amp;lt;code&amp;gt;UBIK.CPL.Converters&amp;lt;/code&amp;gt; namespace in the namespace definitions!&lt;br /&gt;
The following example shows how the &amp;lt;code&amp;gt;NullToBoolConverter&amp;lt;/code&amp;gt; can be defined:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:converters=&amp;quot;clr-namespace:UBIK.CPL.Converters;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;converters:NullToBoolConverter x:Key=&amp;quot;NullToBool&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Cuztomizing --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The key ''NullToBool'' makes this converter accessible from the customizing in this page.&lt;br /&gt;
== Definition With Properties ==&lt;br /&gt;
In the following example, which is the same example from above, the '''StringFormatConverter''' will be additionally defined. To add more formatting possibilities, it has two extra properties, which need to be prefilled during initialization. Henceforth, these properties can be prefilled with static values or with static references.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:converters=&amp;quot;clr-namespace:UBIK.CPL.Converters;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;converters:NullToBoolConverter x:Key=&amp;quot;NullToBool&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;converters:StringFormatConverter x:Key=&amp;quot;Formatter&amp;quot; Parameter1=&amp;quot;5&amp;quot; Parameter2=&amp;quot;{Binding Children.Items.Count}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Cuztomizing --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Whereever this converter is used within the file it was defined in, ''Formatter'' will always have its ''Parameter1'' set to ''5'' and its ''Parameter2'' to the number of children of the currently viewed UBIK object. If this behavior is not intended, consider defining another ''StringFormatConverter'' with a '''different Key''' in the same way as shown above.&amp;lt;br/&amp;gt;&lt;br /&gt;
See below to find out how to use this converter!&lt;br /&gt;
= Usage =&lt;br /&gt;
A converter can only be used in conjunction with a &amp;lt;code&amp;gt;{Binding}&amp;lt;/code&amp;gt;. The following is an easy example, showing how the ''NullToBool'' converter, defined above, can be used.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;My Text&amp;quot; IsVisible=&amp;quot;{Binding MyBindableProperty, Converter={StaticResource NullToBool}}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If '''MyBindableProperty''' is ''null'' or an empty string, the converter will return '''true''', making the Label visible!&lt;br /&gt;
== Parameter ==&lt;br /&gt;
Some converters accept a '''ConverterParameter''', that passes additional information. Closely read the description of the available converters to find out which accept or even require a parameter to work properly. In Ubik, some converters accept a string parameter, consisting of multiple individual parameters separated by &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
An example of this behavior is the '''ContainsToBoolConverter''', which checks if the current value is contained within a collection of values (passed as the ''parameter''):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;My Text&amp;quot; IsVisible=&amp;quot;{Binding MyValue, Converter={StaticResource ContainsToBool}, ConverterParameter=1|2|3|4|5|6|7|8|9}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The label will only be visible if the ''MyValue'' property (which is expected to parse as an Integer in this example) is one of the values of the parameter.&amp;lt;br/&amp;gt;&lt;br /&gt;
Again, to get the converter working, don't forget to define it in the page's resources!&lt;br /&gt;
&lt;br /&gt;
== FallbackValue ==&lt;br /&gt;
In some rare cases, a converter might not return anything desired (like ''null'') if some condition doesn't work out as it should (e.g. ''value'' is ''null''). To still be able to get a usable return value, it's possible to define a '''FallbackValue'''.&lt;br /&gt;
&lt;br /&gt;
== Example Usage of StringFormatConverter ==&lt;br /&gt;
This converter can take up to two additional parameters during definition. Please see [[#Definition With Properties|Definition With Properties]] for more information!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;{Binding MyValue, Converter={StaticResource Formatter}, ConverterParameter=The Value of my value is \{0\}\, compared to \{1\} and \{2\}!}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It's important to note that special characters, like &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;,&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, need to be escaped using a &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, else the expression will be wrongly interpreted (and nothing happens)!&lt;br /&gt;
&lt;br /&gt;
The text of the '''ConverterParameter''' will be analyzed, and any occurrance (including duplicates) of &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{1}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{2}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; replaced with the '''binding value''', '''Formatter.Parameter1''' and '''Formatter.Parameter2''' respectively!&lt;br /&gt;
&lt;br /&gt;
Make sure to note, that Xamarin Forms has a native '''[https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/string-formatting StringFormat]''' option as well, that is probably way faster than using a converter for it. Furthermore, it supports formatting options!&lt;br /&gt;
&lt;br /&gt;
= Data Source =&lt;br /&gt;
Although technically not a converter, the '''SfDataSourceExt''' control is currently on the way of replacing the '''SfDataSourceConverter''', due to improved performance.&lt;br /&gt;
The usage is pretty simple: Similar to the converters, it needs to be defined in the '''Page Resources'''. Then, a '''Key''' and '''Expression''', as well as an '''ItemsSource''' have to be defined. Last, but not least, the the converter can be used within the '''ItemsSource''' property of a Syncfusion '''SfListView'''. See the following example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
             &amp;lt;controls:SfDataSourceExt&lt;br /&gt;
                x:Key=&amp;quot;MyDataSource&amp;quot;&lt;br /&gt;
                ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot;&lt;br /&gt;
                Expression=&amp;quot;Item.Content.MetaUID.ToString().ToLower()==&amp;amp;quot;85a50533-3817-4a0b-84cd-615b48b62565&amp;amp;quot; &amp;amp;amp;&amp;amp;amp; Item[&amp;amp;quot;ORGA_STATUS&amp;amp;quot;]!=100&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    &amp;lt;sync:SfListView&lt;br /&gt;
           x:Name=&amp;quot;ListView1&amp;quot;&lt;br /&gt;
           AllowSwiping=&amp;quot;True&amp;quot;&lt;br /&gt;
           ItemSize=&amp;quot;60&amp;quot;&lt;br /&gt;
           ItemTemplate=&amp;quot;{StaticResource ChildTemplateSelector}&amp;quot;&lt;br /&gt;
           ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource MyDataSource}}&amp;quot;&lt;br /&gt;
           LeftSwipeTemplate=&amp;quot;{StaticResource SwipeLeftTemplateSelector}&amp;quot;&lt;br /&gt;
           RightSwipeTemplate=&amp;quot;{StaticResource SwipeRightTemplateSelector}&amp;quot;&lt;br /&gt;
           SelectionMode=&amp;quot;None&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Thanks to the given expression, filtering is applied once the data source is evaluated. It's important to have [https://www.advancedinstaller.com/user-guide/xml-escaped-chars.html XML special characters] correctly escaped, like the example shows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= List of Available Converters =&lt;br /&gt;
The following list contains all currently available converters for UBIK Xamarin customizing. &lt;br /&gt;
&lt;br /&gt;
'''Two-way''' converters can be used with two-way bindings, e.g. a text-box displaying an editable value. If the value updates in the model, the text-box text changes. If the user edits the value, the value in the model behind also gets updated.&lt;br /&gt;
As a clarification, '''Value''' refers to the '''Binding Value''', and '''parameter''' to the '''ConverterParameter'''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Converter !! 2-Way !! Output Type || Input Type || Parameter Type || Description &lt;br /&gt;
|-&lt;br /&gt;
| BooleanConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Boolean || || &lt;br /&gt;
Interprets the '''boolean value''' and returns it. If the value cannot be interpreted, ''false'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| BooleanInvertConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Boolean || || &lt;br /&gt;
Interprets and converts a '''boolean''' into its '''inverted value'''. If the value cannot be interpreted, ''false'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| BooleanToFontAttributeConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || FontAttribute || Boolean || || &lt;br /&gt;
Converts a '''boolean''' into a '''[https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.fontattributes?view=xamarin-forms font attribute]''' value. In detail, if the value is ''true'', the parameter is interpreted (''Bold'', ''Italic'', ''None'') and returned. The default returned font-attribute is ''None''.&lt;br /&gt;
|- &lt;br /&gt;
| ByteToImageSourceValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ImageSource || Byte[ ],&amp;lt;br/&amp;gt;Byte Stream || || &lt;br /&gt;
Converts a '''byte stream''' value into an '''image source'''.&lt;br /&gt;
|- &lt;br /&gt;
| ChildAreaTemplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Child&amp;lt;wbr/&amp;gt;Area&amp;lt;wbr/&amp;gt;Template || Content&amp;lt;wbr/&amp;gt;ViewModel || || &lt;br /&gt;
Returns a '''ChildAreaTemplate''' from a '''Content&amp;lt;wbr/&amp;gt;ViewModel''' or ''null'' if the ViewModel cannot be interpreted.&lt;br /&gt;
|- &lt;br /&gt;
| ChildItem&amp;lt;wbr/&amp;gt;SelectionMode&amp;lt;wbr/&amp;gt;To&amp;lt;wbr/&amp;gt;SfListView&amp;lt;wbr/&amp;gt;SelectionMode&amp;lt;wbr/&amp;gt;Converter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || [https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.SfListView~SelectionMode.html ListView&amp;lt;wbr/&amp;gt;SelectionMode] || ChildItem&amp;lt;wbr/&amp;gt;SelectionMode || || &lt;br /&gt;
Converts a '''ChildItem&amp;lt;wbr/&amp;gt;SelectionMode''' to a Syncfusion '''[https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.SfListView~SelectionMode.html ListView&amp;lt;wbr/&amp;gt;SelectionMode]'''. Default is &amp;quot;Single&amp;quot;.&lt;br /&gt;
|- &lt;br /&gt;
| ClassificationToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || ContentViewModel || || &lt;br /&gt;
Returns a '''boolean''' indicating whether the given '''ContentViewModel''' is successfully classified.&lt;br /&gt;
|- &lt;br /&gt;
| ContainsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;Object || || &lt;br /&gt;
Checks if the delivered value is '''contained''' within a collection of values (delivered in the parameter, seperated with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;). If the value is contained, ''true'' will be returned, else ''false''. The functionality is similar to the ''ContainsToVisibilityConverter'' in the WinX project.&lt;br /&gt;
|- &lt;br /&gt;
| ContainsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;Object || || &lt;br /&gt;
Same as the ''ContainsToBoolConverter'', but with '''inverted output'''.&lt;br /&gt;
|- &lt;br /&gt;
| ContentAreaTeamplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || UBIKContentArea || ContentViewModel || || This converter is '''not yet finished''' and just returns the ''UBIKContentArea'' if the value is a ''ContentViewModel''.&lt;br /&gt;
|- &lt;br /&gt;
| StringToDateTimeTypesConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || String || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime], [https://docs.microsoft.com/en-us/dotnet/api/system.timespan TimeSpan] || || &lt;br /&gt;
Converts a String to the correct DateType, which can be either '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' or '''[https://docs.microsoft.com/en-us/dotnet/api/system.timespan TimeSpan]'''. If the value cannot be interpreted, the unchanged String value is returned.&lt;br /&gt;
|- &lt;br /&gt;
| DateTimeOffsetToDateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime] || [https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset DateTimeOffset] || || &lt;br /&gt;
Converts a '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset DateTimeOffset]''' to the correct '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''', applied to the current date and time. If the value cannot be interpreted, a new ''DateTime'', generated from the device's current time (&amp;lt;code&amp;gt;DateTime.Now&amp;lt;/code&amp;gt;) is returned.&lt;br /&gt;
|- &lt;br /&gt;
| DateTimeToFromNowStringConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime] || || &lt;br /&gt;
Returns a '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' into a human-readable and easily understandable ''string message'' (the last applying one will be taken):&lt;br /&gt;
* Less than 5 minutes in the past: ''Just now''&lt;br /&gt;
* Less than 10 minutes in the past: ''A few minutes ago''&lt;br /&gt;
* Less than 1 hour in the past: ''An hour ago''&lt;br /&gt;
* Less than 23 Hours in the past: ''Some hours ago''&lt;br /&gt;
* Less than 1 day in the past: ''Yesterday''&lt;br /&gt;
* More than 1 day in the past: The ''DateTime'' value formatted according to the device's localization rules.&lt;br /&gt;
* Not interpretable: ''???''&lt;br /&gt;
|- &lt;br /&gt;
| DebugConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Object || Object || || &lt;br /&gt;
A converter returning the given value for '''debug reasons'''.&lt;br /&gt;
|- &lt;br /&gt;
| DistanceToStringConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Double || || &lt;br /&gt;
Returns the given value interpreted as '''length'''. Values are returned in kilometers with two comma digits (e.g. 2.84km), values smaller than 1km are returned as meters and ''NaN'' will be returned as ''infinity''. If the value cannot be interpreted, an empty string will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| EqualityToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object,&amp;lt;br/&amp;gt;String || Object,&amp;lt;br/&amp;gt;String || &lt;br /&gt;
Returns ''true'' if the given value and parameter are '''equal to each other''', ''false'' otherwise.&lt;br /&gt;
|- &lt;br /&gt;
| EqualityToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object,&amp;lt;br/&amp;gt;String || Object,&amp;lt;br/&amp;gt;String || &lt;br /&gt;
Returns ''true'' if the given value and parameter are '''not equal to each other''', ''false'' otherwise.&lt;br /&gt;
|- &lt;br /&gt;
| SelectionChangedEventArgsConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || [https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.selectionchangedeventargs List&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs] || [https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs.html Item&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs] || || &lt;br /&gt;
Converts an Syncfusion '''[https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs.html Item&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs]''' to a '''[https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.selectionchangedeventargs List&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs]'''. &amp;lt;br/&amp;gt;The use-case of this converter is highly specific.&lt;br /&gt;
|- &lt;br /&gt;
| FilterCriterionToValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || String || FilterCriterion || || &lt;br /&gt;
Converts a [[Property_Based_Content_Filters|'''FilterCriterion''']] to its value. The functionality is similar to UWP's FilterCriterionToValueConverter.&lt;br /&gt;
|- &lt;br /&gt;
| GuidPropertyValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || String || Guid || Binding, where source is ContentViewModel || &lt;br /&gt;
Returns the '''first item''' of the parameter's ''Source-ViewModel'' that '''matches the given GUID''' value. If none is found, ''null'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| IntToColorConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Color || Integer || || &lt;br /&gt;
Converts an ARGB '''integer''' value to a '''color'''. If the value cannot be interpreted, the converter tries to parse the parameter as a ''color'' to return it. If everything fails, ''transparent'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| ItemCountToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Integer || Integer || &lt;br /&gt;
This converter has a '''property''' to set the '''boolean return value''', called ''LesserOrEqualReturnValue''. This property-value will be returned if the given value is '''smaller than or equal to''' the threshold (parameter, defaults to 0). If the value is '''bigger than''' the threshold, the '''inverted''' ''LesserOrEqualReturnValue'' will be returned.&amp;lt;br/&amp;gt;&lt;br /&gt;
In any other case (like the value cannot be interpreted), ''false'' is returned, so it's a good idea to set the converter's property in a way that the return is only ''true'' if you need it.&lt;br /&gt;
|- &lt;br /&gt;
| ItemCountToOverflowConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Integer || Integer || Creates a '''human-readable text''' indicating '''how many items are available'''. The value will be interpreted as the '''total item count''' and the parameter as '''overflow threshold''' (defaults to 99). &amp;lt;br/&amp;gt;If there are more items than the overflow, the overflow value with a + sign will be returned (e.g. 99+). If not, the value itself will be returned. If everything fails, ''null'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| NullToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Object,&amp;lt;br/&amp;gt;String|| || &lt;br /&gt;
''Null'' or an '''empty string''' value get converted to ''true'', and everything else to ''false''.&lt;br /&gt;
|- &lt;br /&gt;
| NullToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Object,&amp;lt;br/&amp;gt;String || || &lt;br /&gt;
''Null'' or an '''empty string''' value get converted to ''false'', and everything else to ''true''.&lt;br /&gt;
|- &lt;br /&gt;
| PathToImageSourceValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Image Source || String || || &lt;br /&gt;
Reads the '''path''' provided as parameter and creates an '''image source''' from it.&lt;br /&gt;
|- &lt;br /&gt;
| PercentageToProgressConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Double || Integer,&amp;lt;br/&amp;gt;Double || || &lt;br /&gt;
The '''numeric value'''  (int or double), interpreted as '''percentage from 0 to 100''', get converted to a '''progress level'''  (0 to 1). Values outside this range will be contained.&lt;br /&gt;
|- &lt;br /&gt;
| PropertyNameExistsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean (Nullable) || ContentViewModel,&amp;lt;br/&amp;gt;IContent || || &lt;br /&gt;
Converts a property to a '''boolean''' based on its '''existence'''. If it exists, ''true'' will be returned, else ''false'' or ''null'' (if something couldn't be properly interpreted).&lt;br /&gt;
|- &lt;br /&gt;
| PropertyNameExistsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean (Nullable) || ContentViewModel,&amp;lt;br/&amp;gt;IContent || || &lt;br /&gt;
Converts a property to a '''boolean''' based on its '''existence'''. If it exists, ''false'' will be returned, else ''true'' or ''null'' (if something couldn't be properly interpreted).&lt;br /&gt;
|- &lt;br /&gt;
| RootAreaTemplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ContentView || Object || || &lt;br /&gt;
If the provided value is '''not null''', the '''UBIKRootArea template''' will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| SelectiveItemToValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean,&amp;lt;br/&amp;gt;String,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;Double,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;FileReferenceData,&amp;lt;br/&amp;gt;GeoData,&amp;lt;br/&amp;gt;Object || Boolean,&amp;lt;br/&amp;gt;String,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;Double,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;FileReferenceData,&amp;lt;br/&amp;gt;GeoData,&amp;lt;br/&amp;gt;Object || Binding, where source is ContentViewModel || &lt;br /&gt;
Converts a '''item''' of a '''selective list''' to its value. If none is found, the passed ''value'' will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| SelectiveListToItemsConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || List of PropertyItems  || IPropertyItem || || &lt;br /&gt;
Returns all items from a selective list.&lt;br /&gt;
|- &lt;br /&gt;
| SfDataSourceConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || DataSource (for ListView) || Double || String (Expression) || &lt;br /&gt;
It's an advanced converter used for '''loading items''' and '''applying filters''' on it. It replaces to ''CollectionToViewConverter'' from the WinX.UWP project. The data source can be directly used with a ''[https://help.syncfusion.com/xamarin/sflistview/overview SfListView]''.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''This converter is obsolete!'''&amp;lt;br/&amp;gt;Use '''SfDataSourceExt''' (see [[#Data Source|Data Source]]) instead!&lt;br /&gt;
|- &lt;br /&gt;
| StringContainsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String || String || &lt;br /&gt;
Returns a '''boolean''' indicating whether the parameter string is included in the value string.&lt;br /&gt;
|- &lt;br /&gt;
| StringContainsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String || String || &lt;br /&gt;
Same as the ''StringContainsToBoolConverter'' but with '''inverted output'''.&lt;br /&gt;
|- &lt;br /&gt;
| StringFormatConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Object || String || Allows the creation of a '''nicely formatted ''string'' message''', similar to [https://docs.microsoft.com/en-us/dotnet/api/system.string.format C#'s String.Format method].&amp;lt;br/&amp;gt;The value will be interpreted as the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; element, and the parameter is the template string (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;The total count is: {0}!&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Up to two additional parameters, named ''Parameter1'' and ''Parameter2'', can be defined at the converter declaration. Adding formatting options to the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; notation is not possible.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Attention''', using the native '''[https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/string-formatting StringFormat]''' option is not only faster, but it also offers more customizability of the value!&amp;lt;br/&amp;gt;&lt;br /&gt;
You might still want to use the ''StringFormatConverter'' in rare cases, though!&lt;br /&gt;
|- &lt;br /&gt;
| ToStringFormatConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Double,&amp;lt;br/&amp;gt;Float,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;String || String || Converts '''primitives''' or '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' to string and allows the application of '''[https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings formatting options]''' (as parameter). &amp;lt;br/&amp;gt;Adding a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; to the end of the format-parameter allows '''[https://docs.microsoft.com/en-us/dotnet/api/system.math.truncate truncation]''' of all decimal places.&lt;br /&gt;
|-&lt;br /&gt;
| ToTypeConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Object || Object || String || Attempts to convert value to the Type specified in parameter, returning the value.&lt;br /&gt;
|- &lt;br /&gt;
| TypeNameToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object || String || Returns ''true'' if the type name of the value is present in the parameter-string (seperated by &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
|- &lt;br /&gt;
| TypeNameToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object || String || Inverted ''TypeNameTo&amp;lt;wbr/&amp;gt;BoolConverter''.&lt;br /&gt;
|- &lt;br /&gt;
| DataTemplateItemTemplateSelectorConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ChildItem&amp;lt;wbr/&amp;gt;Template&amp;lt;wbr/&amp;gt;Selector || String || String || Chooses what '''ChildItem&amp;lt;wbr/&amp;gt;Template&amp;lt;wbr/&amp;gt;Selector''' to return. Having a parameter with the content &amp;quot;Small&amp;quot; returns the small item template selector.&lt;br /&gt;
|- &lt;br /&gt;
| DataTemplateItemsPanelConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ItemsPanelTemplate || Query&amp;lt;wbr/&amp;gt;Details&amp;lt;wbr/&amp;gt;Page&amp;lt;wbr/&amp;gt;ViewModel || || Chooses what '''ItemPanel&amp;lt;wbr/&amp;gt;Template''' to return. Having a parameter with the content &amp;quot;Small&amp;quot; returns the small item template selector.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client | XAML | Xamarin]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Converters In Xamarin]]&lt;br /&gt;
[[Category:Xamarin|Converters In Xamarin]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Property_Direct_Edit_(Client)&amp;diff=23484</id>
		<title>Property Direct Edit (Client)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Property_Direct_Edit_(Client)&amp;diff=23484"/>
				<updated>2022-01-28T11:46:48Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* Behaviors and controls */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
Property direct editing (also known as inline editing) aims to provide a more efficient way for users to edit properties, especially when such tasks are performed frequently.&lt;br /&gt;
&lt;br /&gt;
Generally speaking, direct editing skips the additional dialogs or pages presented in regular editing and allows users to directly interact with the UI displaying properties. For example, a text box type of control can be used to both display the value of a property and accept modifications of the value from the user.&lt;br /&gt;
&lt;br /&gt;
== Supported property types ==&lt;br /&gt;
In {{UBIK}}, we provide default templates for some most frequently used property types. However, you can use your own templates, controls, etc. as you like to deal with these property types or even more (as long as you can find suitable UI controls for dealing with these types).&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
They are accessible as DataTemplates from UBIKThemes.xaml (use the [[Developer_Mode]] to find the default copy) and the syntax in XAML is &amp;lt;code&amp;gt;{StaticResource TEMPLATE_NAME}&amp;lt;/code&amp;gt;. Just like other such templates, they can be customized by overriding the DataTemplates with respective keys in UBIKThemes.xaml.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
They are accessible as DataTemplates from UBIKThemes.xamlx and the syntax in XAML is &amp;lt;code&amp;gt;{DynamicResource TEMPLATE_NAME}&amp;lt;/code&amp;gt;. Just like such templates, they can be customized by providing your own DataTemplate resources (with the keys of TEMPLATE_NAME) in UBIKThemes.xamlx.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== For Properties: ===&lt;br /&gt;
* String/Text: named as UBIKPropertyDirectItemString.&lt;br /&gt;
* Integer: named as UBIKPropertyDirectItemInt.&lt;br /&gt;
* Double: named as UBIKPropertyDirectItemDouble.&lt;br /&gt;
* Boolean: named as UBIKPropertyDirectItemBool.&lt;br /&gt;
* Guid: named as UBIKPropertyDirectItemGuid.&lt;br /&gt;
* DateTime: named as UBIKPropertyDirectItemDateTime.&lt;br /&gt;
* GeoData: named as UBIKPropertyDirectItemGeoData.&lt;br /&gt;
* With selective list items: named as UBIKPropertyDirectItemList.&lt;br /&gt;
&lt;br /&gt;
=== For MRO-Tasks: ===&lt;br /&gt;
* String/Text: named as UBIKTaskPropertyString.&lt;br /&gt;
* Integer: named as UBIKTaskPropertyInt.&lt;br /&gt;
* Double: named as UBIKTaskPropertyDouble.&lt;br /&gt;
* Boolean: named as UBIKTaskPropertyBool.&lt;br /&gt;
* Guid: named as UBIKTaskPropertyGuid.&lt;br /&gt;
* DateTime: named as UBIKTaskPropertyDateTime.&lt;br /&gt;
* GeoData: named as UBIKTaskPropertyGeoData.&lt;br /&gt;
* With selective list items: named as UBIKTaskPropertyList.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Version 4.0|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:WinX|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Xamarin|Property Direct Edit (Client)]]&lt;br /&gt;
&lt;br /&gt;
== PropertyViewModel ==&lt;br /&gt;
This is the view model for every single {{UBIK}} property and also the basement for property direct editing (and regular editing alike). For example, a certain named PropertyViewModel (with the name of PROPERTY_NAME) of the context object in a content page is accessible as &amp;lt;code&amp;gt;{Binding Properties.VisibleItems[PROPERTY_NAME]}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:UBIK_Xamarin_UI_Template_PropertyDirectItemString_Debug_NotInEditing.png|thumb|A test template for direct editing a String property (Xamarin)]]&lt;br /&gt;
[[File:UBIK_Xamarin_UI_Template_PropertyDirectItemString_Debug_InEditing.png|thumb|The same template now in edit mode (Xamarin)]]&lt;br /&gt;
In the example demonstrated in the screenshot where a test template is used to enable direct editing of a String/Text typed property, the following members of the PropertyViewModel are involved.&lt;br /&gt;
* '''InEditing''': This is the boolean member indicating whether the PropertyViewModel is currently in edit mode. It can be used to decide whether the UI should display the DisplayValue text or present a text box for user input;&lt;br /&gt;
* '''Description''': This is the description of the underlying property/meta property;&lt;br /&gt;
* '''ValueItem.PropertyValue''': This is the value of property stored at the PropertyViewModel which can differ from the underlying property value because there can be editing changes not yet confirmed/saved. It can be read from and written to by the text box;&lt;br /&gt;
* '''DisplayValue''': This is the textual version of ValueItem.PropertyValue used for displaying when the InEditing is false;&lt;br /&gt;
* '''StartDirectEditCommand''': Sets InEdit to true and starts the direct editing session. In the example, this is linked to the tapped event of the entire template area;&lt;br /&gt;
* '''ConfirmEditCommand''': Confirms the edit and sets InEdit to false. Even if the property value is not changed, this will give the property a new validation timestamp, technically modifying the property;&lt;br /&gt;
* '''SaveAndCommitCommand''': In addition to confirming the edit, this also saves the changes to the underlying property, saves the owner object and attempts to commit it if the sync mode allows;&lt;br /&gt;
* '''ResetCommand''': Resets the underlying property to its last known server state, saves the owner object and attempts to commit it if the sync mode allows;&lt;br /&gt;
* '''DiscardChangeCommand''': Discards all changes made at the PropertyViewModel level that not yet saved to the underlying property;&lt;br /&gt;
* '''DeleteValueCommand''': Sets the underlying property's value(s) to null and erases its validation timestamp, saves the owner object and attempts to commit it if the sync mode allows;&lt;br /&gt;
* '''CancelEditCommand''': Cancels the current editing session and discards all changes made at the PropertyViewModel level '''in that session''' (different from DiscardChangeCommand).&lt;br /&gt;
&lt;br /&gt;
{{Hint|Once again, you can use the [[Developer_Mode]] to find out more about the PropertyViewModel, like where they are available and how they can be accessed in XAML, or what other members are available underneath, etc.}}&lt;br /&gt;
&lt;br /&gt;
== Relevant types ==&lt;br /&gt;
Here are some types created for the purpose of property direct editing.&lt;br /&gt;
&lt;br /&gt;
=== PropertyDirectItemTemplateSelector ===&lt;br /&gt;
&lt;br /&gt;
This is used in a ListView-like control where item templates should be specified, in this case property item templates specifically. It determines the different DataTemplates to be used for direct editing PropertyViewModels according to their property types. For types that have default {{UBIK}} direct editing support, the template names follow the pattern of &amp;quot;UBIKPropertyDirectItemXXX&amp;quot; where XXX is the type name, e.g. String, DateTime, List, etc.&lt;br /&gt;
&lt;br /&gt;
For types that do not come with default direct editing support, the selector uses the &amp;quot;UBIKPropertyItem&amp;quot; template in which editor dialogs are shown instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:tpl=&amp;quot;using:UBIK.WinX.Templates&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:resources=&amp;quot;clr-namespace:UBIK.CPL.Resources;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TaskPropertyTemplateSelector ===&lt;br /&gt;
&lt;br /&gt;
By default, [[MRO_Objects_(Client)#Task|MRO tasks]] have direct editing enabled for their task related properties in the &amp;quot;UBIKTaskItem&amp;quot; template. This template selector determines the different DataTemplates to be used for direct editing PropertyViewModels according to their property types. For types that have default {{UBIK}} direct editing support, the template names follow the pattern of &amp;quot;UBIKTaskPropertyXXX&amp;quot; where XXX is the type name, e.g. String, DateTime, List, etc.&lt;br /&gt;
&lt;br /&gt;
For types that do not come with default direct editing support, the selector uses the &amp;quot;UBIKTaskProperty&amp;quot; template in which editor dialogs are shown instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:tpl=&amp;quot;using:UBIK.WinX.Templates&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:resources=&amp;quot;clr-namespace:UBIK.CPL.Resources;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ComboBoxItemTemplateSelector (UWP only) ===&lt;br /&gt;
&lt;br /&gt;
By default, a ComboBox uses the same template for the selected item (when closed) as well as the drop down items (when opened), which is not always wanted. This template selector allows you to use different templates for these two types of items.&lt;br /&gt;
&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:tpl=&amp;quot;using:UBIK.WinX.Templates&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tpl:ComboBoxItemTemplateSelector x:Key=&amp;quot;ComboBoxItemTemplateSelector&amp;quot; DropDownItemTemplate=&amp;quot;{StaticResource XXX}&amp;quot; ComboBoxSectionItemTemplate=&amp;quot;{StaticResource XXX}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* DropDownItemTemplate: for the dop down items (when opened)&lt;br /&gt;
* ComboBoxSectionItemTemplate: for the selected item (when closed)&lt;br /&gt;
&lt;br /&gt;
=== Behaviors and controls ===&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
The KeyEventTriggerBehavior is a specialized version of the EventTriggerBehavior in the way that it sets the event to KeyDown by default and allows customizers to define which key (KeyName) should trigger the action(s).&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TextBox ...&lt;br /&gt;
    xmlns:Core=&amp;quot;using:Microsoft.Xaml.Interactions.Core&amp;quot;&lt;br /&gt;
    xmlns:Interactivity=&amp;quot;using:Microsoft.Xaml.Interactivity&amp;quot;&lt;br /&gt;
    xmlns:behaviours=&amp;quot;using:UBIK.WinX.Behaviors&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviours:KeyEventTriggerBehavior KeyName=&amp;quot;Enter&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding ConfirmEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviours:KeyEventTriggerBehavior&amp;gt;&lt;br /&gt;
        &amp;lt;behaviours:KeyEventTriggerBehavior KeyName=&amp;quot;Escape&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding CancelEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviours:KeyEventTriggerBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;/Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/TextBox&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
The SelectAllEntry optionally accepts two commands (ReturnCommand &amp;amp; EscapeCommand) to execute when a user inputs the return key {{key press|Enter}} and the escape key {{key press|Esc}} respecitively.&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid  xmlns:renderers=&amp;quot;clr-namespace:UBIK.CPL.Platform.Renderers;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;renderers:SelectAllEntry ...&lt;br /&gt;
        ReturnCommand=&amp;quot;{Binding ConfirmEditCommand}&amp;quot;&lt;br /&gt;
        EscapeCommand=&amp;quot;{Binding CancelEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;DateTime Control UWP&amp;quot;&amp;gt;&lt;br /&gt;
The CalendarControl and TimeControl both have an additional Event called &amp;quot;DateTimeChanged&amp;quot; that is called when confirming a value on the flyoutpickers. &lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKCalendarControl DateString=&amp;quot;{Binding ValueItem.PropertyValue.Date, Mode=TwoWay}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;Core:EventTriggerBehavior EventName=&amp;quot;DateTimeChanged&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding PropertyViewModel.SaveAndCommitCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Core:EventTriggerBehavior&amp;gt;&lt;br /&gt;
        &amp;lt;behaviours:KeyEventTriggerBehavior KeyName=&amp;quot;Enter&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding PropertyViewModel.ConfirmEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviours:KeyEventTriggerBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;/Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/controls:UBIKCalendarControl&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKTimeControl TimeString=&amp;quot;{Binding ValueItem.PropertyValue.Time, Mode=TwoWay}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;Core:EventTriggerBehavior EventName=&amp;quot;DateTimeChanged&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding PropertyViewModel.SaveAndCommitCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Core:EventTriggerBehavior&amp;gt;&lt;br /&gt;
        &amp;lt;behaviours:KeyEventTriggerBehavior KeyName=&amp;quot;Enter&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding PropertyViewModel.ConfirmEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviours:KeyEventTriggerBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;/Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/controls:UBIKTimeControl&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;DateTimeControl Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
The CalendarControl has an additional Event called &amp;quot;DateSelected&amp;quot; that is called when confirming a value on the flyoutpickers. The TimeControl has a similar &amp;quot;TimeSelected&amp;quot; Event (Note that this event may have wrong behaviour on iOS)&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;DatePicker Date=&amp;quot;{Binding PropertyViewModel.ValueItem.PropertyValue.Date, Converter={StaticResource StringToDateTimeTypesConverter}&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;DatePicker.Behaviors&amp;gt;&lt;br /&gt;
      &amp;lt;behaviors:EventToCommandBehavior EventName=&amp;quot;DateSelected&amp;quot;  Command=&amp;quot;{Binding PropertyViewModel.ConfirmEditCommand}&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/DatePicker.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/DatePicker&amp;gt;&lt;br /&gt;
&amp;lt;ctrls:TimePickerExt Time=&amp;quot;{Binding PropertyViewModel.ValueItem.PropertyValue.Time, Converter={StaticResource StringToDateTimeTypesConverter}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ctrls:TimePickerExt.Behaviors&amp;gt;&lt;br /&gt;
    &amp;lt;behaviors:EventToCommandBehavior EventName=&amp;quot;TimeSelected&amp;quot; Command=&amp;quot;{Binding PropertyViewModel.ConfirmEditCommand}&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/ctrls:TimePickerExt.Behaviors&amp;gt;  &lt;br /&gt;
&amp;lt;/ctrls:TimePickerExt&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Version 4.0|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:WinX|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Xamarin|Property Direct Edit (Client)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Property_Direct_Edit_(Client)&amp;diff=23483</id>
		<title>Property Direct Edit (Client)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Property_Direct_Edit_(Client)&amp;diff=23483"/>
				<updated>2022-01-28T11:44:31Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* Behaviors and controls */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
Property direct editing (also known as inline editing) aims to provide a more efficient way for users to edit properties, especially when such tasks are performed frequently.&lt;br /&gt;
&lt;br /&gt;
Generally speaking, direct editing skips the additional dialogs or pages presented in regular editing and allows users to directly interact with the UI displaying properties. For example, a text box type of control can be used to both display the value of a property and accept modifications of the value from the user.&lt;br /&gt;
&lt;br /&gt;
== Supported property types ==&lt;br /&gt;
In {{UBIK}}, we provide default templates for some most frequently used property types. However, you can use your own templates, controls, etc. as you like to deal with these property types or even more (as long as you can find suitable UI controls for dealing with these types).&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
They are accessible as DataTemplates from UBIKThemes.xaml (use the [[Developer_Mode]] to find the default copy) and the syntax in XAML is &amp;lt;code&amp;gt;{StaticResource TEMPLATE_NAME}&amp;lt;/code&amp;gt;. Just like other such templates, they can be customized by overriding the DataTemplates with respective keys in UBIKThemes.xaml.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
They are accessible as DataTemplates from UBIKThemes.xamlx and the syntax in XAML is &amp;lt;code&amp;gt;{DynamicResource TEMPLATE_NAME}&amp;lt;/code&amp;gt;. Just like such templates, they can be customized by providing your own DataTemplate resources (with the keys of TEMPLATE_NAME) in UBIKThemes.xamlx.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== For Properties: ===&lt;br /&gt;
* String/Text: named as UBIKPropertyDirectItemString.&lt;br /&gt;
* Integer: named as UBIKPropertyDirectItemInt.&lt;br /&gt;
* Double: named as UBIKPropertyDirectItemDouble.&lt;br /&gt;
* Boolean: named as UBIKPropertyDirectItemBool.&lt;br /&gt;
* Guid: named as UBIKPropertyDirectItemGuid.&lt;br /&gt;
* DateTime: named as UBIKPropertyDirectItemDateTime.&lt;br /&gt;
* GeoData: named as UBIKPropertyDirectItemGeoData.&lt;br /&gt;
* With selective list items: named as UBIKPropertyDirectItemList.&lt;br /&gt;
&lt;br /&gt;
=== For MRO-Tasks: ===&lt;br /&gt;
* String/Text: named as UBIKTaskPropertyString.&lt;br /&gt;
* Integer: named as UBIKTaskPropertyInt.&lt;br /&gt;
* Double: named as UBIKTaskPropertyDouble.&lt;br /&gt;
* Boolean: named as UBIKTaskPropertyBool.&lt;br /&gt;
* Guid: named as UBIKTaskPropertyGuid.&lt;br /&gt;
* DateTime: named as UBIKTaskPropertyDateTime.&lt;br /&gt;
* GeoData: named as UBIKTaskPropertyGeoData.&lt;br /&gt;
* With selective list items: named as UBIKTaskPropertyList.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Version 4.0|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:WinX|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Xamarin|Property Direct Edit (Client)]]&lt;br /&gt;
&lt;br /&gt;
== PropertyViewModel ==&lt;br /&gt;
This is the view model for every single {{UBIK}} property and also the basement for property direct editing (and regular editing alike). For example, a certain named PropertyViewModel (with the name of PROPERTY_NAME) of the context object in a content page is accessible as &amp;lt;code&amp;gt;{Binding Properties.VisibleItems[PROPERTY_NAME]}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:UBIK_Xamarin_UI_Template_PropertyDirectItemString_Debug_NotInEditing.png|thumb|A test template for direct editing a String property (Xamarin)]]&lt;br /&gt;
[[File:UBIK_Xamarin_UI_Template_PropertyDirectItemString_Debug_InEditing.png|thumb|The same template now in edit mode (Xamarin)]]&lt;br /&gt;
In the example demonstrated in the screenshot where a test template is used to enable direct editing of a String/Text typed property, the following members of the PropertyViewModel are involved.&lt;br /&gt;
* '''InEditing''': This is the boolean member indicating whether the PropertyViewModel is currently in edit mode. It can be used to decide whether the UI should display the DisplayValue text or present a text box for user input;&lt;br /&gt;
* '''Description''': This is the description of the underlying property/meta property;&lt;br /&gt;
* '''ValueItem.PropertyValue''': This is the value of property stored at the PropertyViewModel which can differ from the underlying property value because there can be editing changes not yet confirmed/saved. It can be read from and written to by the text box;&lt;br /&gt;
* '''DisplayValue''': This is the textual version of ValueItem.PropertyValue used for displaying when the InEditing is false;&lt;br /&gt;
* '''StartDirectEditCommand''': Sets InEdit to true and starts the direct editing session. In the example, this is linked to the tapped event of the entire template area;&lt;br /&gt;
* '''ConfirmEditCommand''': Confirms the edit and sets InEdit to false. Even if the property value is not changed, this will give the property a new validation timestamp, technically modifying the property;&lt;br /&gt;
* '''SaveAndCommitCommand''': In addition to confirming the edit, this also saves the changes to the underlying property, saves the owner object and attempts to commit it if the sync mode allows;&lt;br /&gt;
* '''ResetCommand''': Resets the underlying property to its last known server state, saves the owner object and attempts to commit it if the sync mode allows;&lt;br /&gt;
* '''DiscardChangeCommand''': Discards all changes made at the PropertyViewModel level that not yet saved to the underlying property;&lt;br /&gt;
* '''DeleteValueCommand''': Sets the underlying property's value(s) to null and erases its validation timestamp, saves the owner object and attempts to commit it if the sync mode allows;&lt;br /&gt;
* '''CancelEditCommand''': Cancels the current editing session and discards all changes made at the PropertyViewModel level '''in that session''' (different from DiscardChangeCommand).&lt;br /&gt;
&lt;br /&gt;
{{Hint|Once again, you can use the [[Developer_Mode]] to find out more about the PropertyViewModel, like where they are available and how they can be accessed in XAML, or what other members are available underneath, etc.}}&lt;br /&gt;
&lt;br /&gt;
== Relevant types ==&lt;br /&gt;
Here are some types created for the purpose of property direct editing.&lt;br /&gt;
&lt;br /&gt;
=== PropertyDirectItemTemplateSelector ===&lt;br /&gt;
&lt;br /&gt;
This is used in a ListView-like control where item templates should be specified, in this case property item templates specifically. It determines the different DataTemplates to be used for direct editing PropertyViewModels according to their property types. For types that have default {{UBIK}} direct editing support, the template names follow the pattern of &amp;quot;UBIKPropertyDirectItemXXX&amp;quot; where XXX is the type name, e.g. String, DateTime, List, etc.&lt;br /&gt;
&lt;br /&gt;
For types that do not come with default direct editing support, the selector uses the &amp;quot;UBIKPropertyItem&amp;quot; template in which editor dialogs are shown instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:tpl=&amp;quot;using:UBIK.WinX.Templates&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:resources=&amp;quot;clr-namespace:UBIK.CPL.Resources;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TaskPropertyTemplateSelector ===&lt;br /&gt;
&lt;br /&gt;
By default, [[MRO_Objects_(Client)#Task|MRO tasks]] have direct editing enabled for their task related properties in the &amp;quot;UBIKTaskItem&amp;quot; template. This template selector determines the different DataTemplates to be used for direct editing PropertyViewModels according to their property types. For types that have default {{UBIK}} direct editing support, the template names follow the pattern of &amp;quot;UBIKTaskPropertyXXX&amp;quot; where XXX is the type name, e.g. String, DateTime, List, etc.&lt;br /&gt;
&lt;br /&gt;
For types that do not come with default direct editing support, the selector uses the &amp;quot;UBIKTaskProperty&amp;quot; template in which editor dialogs are shown instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:tpl=&amp;quot;using:UBIK.WinX.Templates&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:resources=&amp;quot;clr-namespace:UBIK.CPL.Resources;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ComboBoxItemTemplateSelector (UWP only) ===&lt;br /&gt;
&lt;br /&gt;
By default, a ComboBox uses the same template for the selected item (when closed) as well as the drop down items (when opened), which is not always wanted. This template selector allows you to use different templates for these two types of items.&lt;br /&gt;
&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:tpl=&amp;quot;using:UBIK.WinX.Templates&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tpl:ComboBoxItemTemplateSelector x:Key=&amp;quot;ComboBoxItemTemplateSelector&amp;quot; DropDownItemTemplate=&amp;quot;{StaticResource XXX}&amp;quot; ComboBoxSectionItemTemplate=&amp;quot;{StaticResource XXX}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* DropDownItemTemplate: for the dop down items (when opened)&lt;br /&gt;
* ComboBoxSectionItemTemplate: for the selected item (when closed)&lt;br /&gt;
&lt;br /&gt;
=== Behaviors and controls ===&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
The KeyEventTriggerBehavior is a specialized version of the EventTriggerBehavior in the way that it sets the event to KeyDown by default and allows customizers to define which key (KeyName) should trigger the action(s).&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TextBox ...&lt;br /&gt;
    xmlns:Core=&amp;quot;using:Microsoft.Xaml.Interactions.Core&amp;quot;&lt;br /&gt;
    xmlns:Interactivity=&amp;quot;using:Microsoft.Xaml.Interactivity&amp;quot;&lt;br /&gt;
    xmlns:behaviours=&amp;quot;using:UBIK.WinX.Behaviors&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviours:KeyEventTriggerBehavior KeyName=&amp;quot;Enter&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding ConfirmEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviours:KeyEventTriggerBehavior&amp;gt;&lt;br /&gt;
        &amp;lt;behaviours:KeyEventTriggerBehavior KeyName=&amp;quot;Escape&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding CancelEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviours:KeyEventTriggerBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;/Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/TextBox&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
The SelectAllEntry optionally accepts two commands (ReturnCommand &amp;amp; EscapeCommand) to execute when a user inputs the return key {{key press|Enter}} and the escape key {{key press|Esc}} respecitively.&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid  xmlns:renderers=&amp;quot;clr-namespace:UBIK.CPL.Platform.Renderers;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;renderers:SelectAllEntry ...&lt;br /&gt;
        ReturnCommand=&amp;quot;{Binding ConfirmEditCommand}&amp;quot;&lt;br /&gt;
        EscapeCommand=&amp;quot;{Binding CancelEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;DateTime Control UWP&amp;quot;&amp;gt;&lt;br /&gt;
The DateTime Control has an additional Event called &amp;quot;DateTimeChanged&amp;quot; that is called when confirming a value on the flyoutpickers. &lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKCalendarControl DateString=&amp;quot;{Binding ValueItem.PropertyValue.Date, Mode=TwoWay}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;Core:EventTriggerBehavior EventName=&amp;quot;DateTimeChanged&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding PropertyViewModel.SaveAndCommitCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Core:EventTriggerBehavior&amp;gt;&lt;br /&gt;
        &amp;lt;behaviours:KeyEventTriggerBehavior KeyName=&amp;quot;Enter&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding PropertyViewModel.ConfirmEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviours:KeyEventTriggerBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;/Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/controls:UBIKCalendarControl&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKTimeControl TimeString=&amp;quot;{Binding ValueItem.PropertyValue.Time, Mode=TwoWay}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;Core:EventTriggerBehavior EventName=&amp;quot;DateTimeChanged&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding PropertyViewModel.SaveAndCommitCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Core:EventTriggerBehavior&amp;gt;&lt;br /&gt;
        &amp;lt;behaviours:KeyEventTriggerBehavior KeyName=&amp;quot;Enter&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding PropertyViewModel.ConfirmEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviours:KeyEventTriggerBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;/Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/controls:UBIKTimeControl&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;DateTimeControl Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
The CalendarControl has an additional Event called &amp;quot;DateSelected&amp;quot; that is called when confirming a value on the flyoutpickers. The TimeControl has a similar &amp;quot;TimeSelected&amp;quot; Event (Note that this event may have wrong behaviour on iOS)&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;DatePicker Date=&amp;quot;{Binding PropertyViewModel.ValueItem.PropertyValue.Date, Converter={StaticResource StringToDateTimeTypesConverter}&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;DatePicker.Behaviors&amp;gt;&lt;br /&gt;
      &amp;lt;behaviors:EventToCommandBehavior EventName=&amp;quot;DateSelected&amp;quot;  Command=&amp;quot;{Binding PropertyViewModel.ConfirmEditCommand}&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/DatePicker.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/DatePicker&amp;gt;&lt;br /&gt;
&amp;lt;ctrls:TimePickerExt Time=&amp;quot;{Binding PropertyViewModel.ValueItem.PropertyValue.Time, Converter={StaticResource StringToDateTimeTypesConverter}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ctrls:TimePickerExt.Behaviors&amp;gt;&lt;br /&gt;
    &amp;lt;behaviors:EventToCommandBehavior EventName=&amp;quot;TimeSelected&amp;quot; Command=&amp;quot;{Binding PropertyViewModel.ConfirmEditCommand}&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/ctrls:TimePickerExt.Behaviors&amp;gt;  &lt;br /&gt;
&amp;lt;/ctrls:TimePickerExt&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Version 4.0|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:WinX|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Xamarin|Property Direct Edit (Client)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Property_Direct_Edit_(Client)&amp;diff=23479</id>
		<title>Property Direct Edit (Client)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Property_Direct_Edit_(Client)&amp;diff=23479"/>
				<updated>2022-01-27T10:38:36Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* Behaviors and controls */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
Property direct editing (also known as inline editing) aims to provide a more efficient way for users to edit properties, especially when such tasks are performed frequently.&lt;br /&gt;
&lt;br /&gt;
Generally speaking, direct editing skips the additional dialogs or pages presented in regular editing and allows users to directly interact with the UI displaying properties. For example, a text box type of control can be used to both display the value of a property and accept modifications of the value from the user.&lt;br /&gt;
&lt;br /&gt;
== Supported property types ==&lt;br /&gt;
In {{UBIK}}, we provide default templates for some most frequently used property types. However, you can use your own templates, controls, etc. as you like to deal with these property types or even more (as long as you can find suitable UI controls for dealing with these types).&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
They are accessible as DataTemplates from UBIKThemes.xaml (use the [[Developer_Mode]] to find the default copy) and the syntax in XAML is &amp;lt;code&amp;gt;{StaticResource TEMPLATE_NAME}&amp;lt;/code&amp;gt;. Just like other such templates, they can be customized by overriding the DataTemplates with respective keys in UBIKThemes.xaml.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
They are accessible as DataTemplates from UBIKThemes.xamlx and the syntax in XAML is &amp;lt;code&amp;gt;{DynamicResource TEMPLATE_NAME}&amp;lt;/code&amp;gt;. Just like such templates, they can be customized by providing your own DataTemplate resources (with the keys of TEMPLATE_NAME) in UBIKThemes.xamlx.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== For Properties: ===&lt;br /&gt;
* String/Text: named as UBIKPropertyDirectItemString.&lt;br /&gt;
* Integer: named as UBIKPropertyDirectItemInt.&lt;br /&gt;
* Double: named as UBIKPropertyDirectItemDouble.&lt;br /&gt;
* Boolean: named as UBIKPropertyDirectItemBool.&lt;br /&gt;
* Guid: named as UBIKPropertyDirectItemGuid.&lt;br /&gt;
* DateTime: named as UBIKPropertyDirectItemDateTime.&lt;br /&gt;
* GeoData: named as UBIKPropertyDirectItemGeoData.&lt;br /&gt;
* With selective list items: named as UBIKPropertyDirectItemList.&lt;br /&gt;
&lt;br /&gt;
=== For MRO-Tasks: ===&lt;br /&gt;
* String/Text: named as UBIKTaskPropertyString.&lt;br /&gt;
* Integer: named as UBIKTaskPropertyInt.&lt;br /&gt;
* Double: named as UBIKTaskPropertyDouble.&lt;br /&gt;
* Boolean: named as UBIKTaskPropertyBool.&lt;br /&gt;
* Guid: named as UBIKTaskPropertyGuid.&lt;br /&gt;
* DateTime: named as UBIKTaskPropertyDateTime.&lt;br /&gt;
* GeoData: named as UBIKTaskPropertyGeoData.&lt;br /&gt;
* With selective list items: named as UBIKTaskPropertyList.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Version 4.0|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:WinX|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Xamarin|Property Direct Edit (Client)]]&lt;br /&gt;
&lt;br /&gt;
== PropertyViewModel ==&lt;br /&gt;
This is the view model for every single {{UBIK}} property and also the basement for property direct editing (and regular editing alike). For example, a certain named PropertyViewModel (with the name of PROPERTY_NAME) of the context object in a content page is accessible as &amp;lt;code&amp;gt;{Binding Properties.VisibleItems[PROPERTY_NAME]}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:UBIK_Xamarin_UI_Template_PropertyDirectItemString_Debug_NotInEditing.png|thumb|A test template for direct editing a String property (Xamarin)]]&lt;br /&gt;
[[File:UBIK_Xamarin_UI_Template_PropertyDirectItemString_Debug_InEditing.png|thumb|The same template now in edit mode (Xamarin)]]&lt;br /&gt;
In the example demonstrated in the screenshot where a test template is used to enable direct editing of a String/Text typed property, the following members of the PropertyViewModel are involved.&lt;br /&gt;
* '''InEditing''': This is the boolean member indicating whether the PropertyViewModel is currently in edit mode. It can be used to decide whether the UI should display the DisplayValue text or present a text box for user input;&lt;br /&gt;
* '''Description''': This is the description of the underlying property/meta property;&lt;br /&gt;
* '''ValueItem.PropertyValue''': This is the value of property stored at the PropertyViewModel which can differ from the underlying property value because there can be editing changes not yet confirmed/saved. It can be read from and written to by the text box;&lt;br /&gt;
* '''DisplayValue''': This is the textual version of ValueItem.PropertyValue used for displaying when the InEditing is false;&lt;br /&gt;
* '''StartDirectEditCommand''': Sets InEdit to true and starts the direct editing session. In the example, this is linked to the tapped event of the entire template area;&lt;br /&gt;
* '''ConfirmEditCommand''': Confirms the edit and sets InEdit to false. Even if the property value is not changed, this will give the property a new validation timestamp, technically modifying the property;&lt;br /&gt;
* '''SaveAndCommitCommand''': In addition to confirming the edit, this also saves the changes to the underlying property, saves the owner object and attempts to commit it if the sync mode allows;&lt;br /&gt;
* '''ResetCommand''': Resets the underlying property to its last known server state, saves the owner object and attempts to commit it if the sync mode allows;&lt;br /&gt;
* '''DiscardChangeCommand''': Discards all changes made at the PropertyViewModel level that not yet saved to the underlying property;&lt;br /&gt;
* '''DeleteValueCommand''': Sets the underlying property's value(s) to null and erases its validation timestamp, saves the owner object and attempts to commit it if the sync mode allows;&lt;br /&gt;
* '''CancelEditCommand''': Cancels the current editing session and discards all changes made at the PropertyViewModel level '''in that session''' (different from DiscardChangeCommand).&lt;br /&gt;
&lt;br /&gt;
{{Hint|Once again, you can use the [[Developer_Mode]] to find out more about the PropertyViewModel, like where they are available and how they can be accessed in XAML, or what other members are available underneath, etc.}}&lt;br /&gt;
&lt;br /&gt;
== Relevant types ==&lt;br /&gt;
Here are some types created for the purpose of property direct editing.&lt;br /&gt;
&lt;br /&gt;
=== PropertyDirectItemTemplateSelector ===&lt;br /&gt;
&lt;br /&gt;
This is used in a ListView-like control where item templates should be specified, in this case property item templates specifically. It determines the different DataTemplates to be used for direct editing PropertyViewModels according to their property types. For types that have default {{UBIK}} direct editing support, the template names follow the pattern of &amp;quot;UBIKPropertyDirectItemXXX&amp;quot; where XXX is the type name, e.g. String, DateTime, List, etc.&lt;br /&gt;
&lt;br /&gt;
For types that do not come with default direct editing support, the selector uses the &amp;quot;UBIKPropertyItem&amp;quot; template in which editor dialogs are shown instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:tpl=&amp;quot;using:UBIK.WinX.Templates&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:resources=&amp;quot;clr-namespace:UBIK.CPL.Resources;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TaskPropertyTemplateSelector ===&lt;br /&gt;
&lt;br /&gt;
By default, [[MRO_Objects_(Client)#Task|MRO tasks]] have direct editing enabled for their task related properties in the &amp;quot;UBIKTaskItem&amp;quot; template. This template selector determines the different DataTemplates to be used for direct editing PropertyViewModels according to their property types. For types that have default {{UBIK}} direct editing support, the template names follow the pattern of &amp;quot;UBIKTaskPropertyXXX&amp;quot; where XXX is the type name, e.g. String, DateTime, List, etc.&lt;br /&gt;
&lt;br /&gt;
For types that do not come with default direct editing support, the selector uses the &amp;quot;UBIKTaskProperty&amp;quot; template in which editor dialogs are shown instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:tpl=&amp;quot;using:UBIK.WinX.Templates&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:resources=&amp;quot;clr-namespace:UBIK.CPL.Resources;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ComboBoxItemTemplateSelector (UWP only) ===&lt;br /&gt;
&lt;br /&gt;
By default, a ComboBox uses the same template for the selected item (when closed) as well as the drop down items (when opened), which is not always wanted. This template selector allows you to use different templates for these two types of items.&lt;br /&gt;
&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:tpl=&amp;quot;using:UBIK.WinX.Templates&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tpl:ComboBoxItemTemplateSelector x:Key=&amp;quot;ComboBoxItemTemplateSelector&amp;quot; DropDownItemTemplate=&amp;quot;{StaticResource XXX}&amp;quot; ComboBoxSectionItemTemplate=&amp;quot;{StaticResource XXX}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* DropDownItemTemplate: for the dop down items (when opened)&lt;br /&gt;
* ComboBoxSectionItemTemplate: for the selected item (when closed)&lt;br /&gt;
&lt;br /&gt;
=== Behaviors and controls ===&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
The KeyEventTriggerBehavior is a specialized version of the EventTriggerBehavior in the way that it sets the event to KeyDown by default and allows customizers to define which key (KeyName) should trigger the action(s).&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TextBox ...&lt;br /&gt;
    xmlns:Core=&amp;quot;using:Microsoft.Xaml.Interactions.Core&amp;quot;&lt;br /&gt;
    xmlns:Interactivity=&amp;quot;using:Microsoft.Xaml.Interactivity&amp;quot;&lt;br /&gt;
    xmlns:behaviours=&amp;quot;using:UBIK.WinX.Behaviors&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviours:KeyEventTriggerBehavior KeyName=&amp;quot;Enter&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding ConfirmEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviours:KeyEventTriggerBehavior&amp;gt;&lt;br /&gt;
        &amp;lt;behaviours:KeyEventTriggerBehavior KeyName=&amp;quot;Escape&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding CancelEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviours:KeyEventTriggerBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;/Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/TextBox&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
The SelectAllEntry optionally accepts two commands (ReturnCommand &amp;amp; EscapeCommand) to execute when a user inputs the return key {{key press|Enter}} and the escape key {{key press|Esc}} respecitively.&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid  xmlns:renderers=&amp;quot;clr-namespace:UBIK.CPL.Platform.Renderers;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;renderers:SelectAllEntry ...&lt;br /&gt;
        ReturnCommand=&amp;quot;{Binding ConfirmEditCommand}&amp;quot;&lt;br /&gt;
        EscapeCommand=&amp;quot;{Binding CancelEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;DateTime Control UWP&amp;quot;&amp;gt;&lt;br /&gt;
The DateTime Control has an additional Event called &amp;quot;DateTimeChanged&amp;quot; that is called when confirming a value on the flyoutpickers. &lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKCalendarControl DateString=&amp;quot;{Binding ValueItem.PropertyValue.Date, Mode=TwoWay}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;Core:EventTriggerBehavior EventName=&amp;quot;DateTimeChanged&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding PropertyViewModel.SaveAndCommitCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Core:EventTriggerBehavior&amp;gt;&lt;br /&gt;
        &amp;lt;behaviours:KeyEventTriggerBehavior KeyName=&amp;quot;Enter&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding PropertyViewModel.ConfirmEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviours:KeyEventTriggerBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;/Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/controls:UBIKCalendarControl&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKTimeControl TimeString=&amp;quot;{Binding ValueItem.PropertyValue.Time, Mode=TwoWay}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;Core:EventTriggerBehavior EventName=&amp;quot;DateTimeChanged&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding PropertyViewModel.SaveAndCommitCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Core:EventTriggerBehavior&amp;gt;&lt;br /&gt;
        &amp;lt;behaviours:KeyEventTriggerBehavior KeyName=&amp;quot;Enter&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding PropertyViewModel.ConfirmEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviours:KeyEventTriggerBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;/Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/controls:UBIKTimeControl&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;DateTimeControl Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
The CalendarControl has an additional Event called &amp;quot;DateSelected&amp;quot; that is called when confirming a value on the flyoutpickers. The TimeControl doesn't have this feature yet.&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;DatePicker Date=&amp;quot;{Binding PropertyViewModel.ValueItem.PropertyValue.Date, Converter={StaticResource StringToDateTimeTypesConverter}&amp;gt;&lt;br /&gt;
   &amp;lt;DatePicker.Behaviors&amp;gt;&lt;br /&gt;
      &amp;lt;behaviors:EventToCommandBehavior EventName=&amp;quot;DateSelected&amp;quot;  Command=&amp;quot;{Binding PropertyViewModel.ConfirmEditCommand}&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/DatePicker.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/DatePicker&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Version 4.0|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:WinX|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Xamarin|Property Direct Edit (Client)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	<entry>
		<id>https://wikitest.augmensys.com/index.php?title=Property_Direct_Edit_(Client)&amp;diff=23478</id>
		<title>Property Direct Edit (Client)</title>
		<link rel="alternate" type="text/html" href="https://wikitest.augmensys.com/index.php?title=Property_Direct_Edit_(Client)&amp;diff=23478"/>
				<updated>2022-01-27T10:19:15Z</updated>
		
		<summary type="html">&lt;p&gt;BLE: /* Supported property types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
Property direct editing (also known as inline editing) aims to provide a more efficient way for users to edit properties, especially when such tasks are performed frequently.&lt;br /&gt;
&lt;br /&gt;
Generally speaking, direct editing skips the additional dialogs or pages presented in regular editing and allows users to directly interact with the UI displaying properties. For example, a text box type of control can be used to both display the value of a property and accept modifications of the value from the user.&lt;br /&gt;
&lt;br /&gt;
== Supported property types ==&lt;br /&gt;
In {{UBIK}}, we provide default templates for some most frequently used property types. However, you can use your own templates, controls, etc. as you like to deal with these property types or even more (as long as you can find suitable UI controls for dealing with these types).&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
They are accessible as DataTemplates from UBIKThemes.xaml (use the [[Developer_Mode]] to find the default copy) and the syntax in XAML is &amp;lt;code&amp;gt;{StaticResource TEMPLATE_NAME}&amp;lt;/code&amp;gt;. Just like other such templates, they can be customized by overriding the DataTemplates with respective keys in UBIKThemes.xaml.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
They are accessible as DataTemplates from UBIKThemes.xamlx and the syntax in XAML is &amp;lt;code&amp;gt;{DynamicResource TEMPLATE_NAME}&amp;lt;/code&amp;gt;. Just like such templates, they can be customized by providing your own DataTemplate resources (with the keys of TEMPLATE_NAME) in UBIKThemes.xamlx.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== For Properties: ===&lt;br /&gt;
* String/Text: named as UBIKPropertyDirectItemString.&lt;br /&gt;
* Integer: named as UBIKPropertyDirectItemInt.&lt;br /&gt;
* Double: named as UBIKPropertyDirectItemDouble.&lt;br /&gt;
* Boolean: named as UBIKPropertyDirectItemBool.&lt;br /&gt;
* Guid: named as UBIKPropertyDirectItemGuid.&lt;br /&gt;
* DateTime: named as UBIKPropertyDirectItemDateTime.&lt;br /&gt;
* GeoData: named as UBIKPropertyDirectItemGeoData.&lt;br /&gt;
* With selective list items: named as UBIKPropertyDirectItemList.&lt;br /&gt;
&lt;br /&gt;
=== For MRO-Tasks: ===&lt;br /&gt;
* String/Text: named as UBIKTaskPropertyString.&lt;br /&gt;
* Integer: named as UBIKTaskPropertyInt.&lt;br /&gt;
* Double: named as UBIKTaskPropertyDouble.&lt;br /&gt;
* Boolean: named as UBIKTaskPropertyBool.&lt;br /&gt;
* Guid: named as UBIKTaskPropertyGuid.&lt;br /&gt;
* DateTime: named as UBIKTaskPropertyDateTime.&lt;br /&gt;
* GeoData: named as UBIKTaskPropertyGeoData.&lt;br /&gt;
* With selective list items: named as UBIKTaskPropertyList.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Version 4.0|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:WinX|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Xamarin|Property Direct Edit (Client)]]&lt;br /&gt;
&lt;br /&gt;
== PropertyViewModel ==&lt;br /&gt;
This is the view model for every single {{UBIK}} property and also the basement for property direct editing (and regular editing alike). For example, a certain named PropertyViewModel (with the name of PROPERTY_NAME) of the context object in a content page is accessible as &amp;lt;code&amp;gt;{Binding Properties.VisibleItems[PROPERTY_NAME]}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:UBIK_Xamarin_UI_Template_PropertyDirectItemString_Debug_NotInEditing.png|thumb|A test template for direct editing a String property (Xamarin)]]&lt;br /&gt;
[[File:UBIK_Xamarin_UI_Template_PropertyDirectItemString_Debug_InEditing.png|thumb|The same template now in edit mode (Xamarin)]]&lt;br /&gt;
In the example demonstrated in the screenshot where a test template is used to enable direct editing of a String/Text typed property, the following members of the PropertyViewModel are involved.&lt;br /&gt;
* '''InEditing''': This is the boolean member indicating whether the PropertyViewModel is currently in edit mode. It can be used to decide whether the UI should display the DisplayValue text or present a text box for user input;&lt;br /&gt;
* '''Description''': This is the description of the underlying property/meta property;&lt;br /&gt;
* '''ValueItem.PropertyValue''': This is the value of property stored at the PropertyViewModel which can differ from the underlying property value because there can be editing changes not yet confirmed/saved. It can be read from and written to by the text box;&lt;br /&gt;
* '''DisplayValue''': This is the textual version of ValueItem.PropertyValue used for displaying when the InEditing is false;&lt;br /&gt;
* '''StartDirectEditCommand''': Sets InEdit to true and starts the direct editing session. In the example, this is linked to the tapped event of the entire template area;&lt;br /&gt;
* '''ConfirmEditCommand''': Confirms the edit and sets InEdit to false. Even if the property value is not changed, this will give the property a new validation timestamp, technically modifying the property;&lt;br /&gt;
* '''SaveAndCommitCommand''': In addition to confirming the edit, this also saves the changes to the underlying property, saves the owner object and attempts to commit it if the sync mode allows;&lt;br /&gt;
* '''ResetCommand''': Resets the underlying property to its last known server state, saves the owner object and attempts to commit it if the sync mode allows;&lt;br /&gt;
* '''DiscardChangeCommand''': Discards all changes made at the PropertyViewModel level that not yet saved to the underlying property;&lt;br /&gt;
* '''DeleteValueCommand''': Sets the underlying property's value(s) to null and erases its validation timestamp, saves the owner object and attempts to commit it if the sync mode allows;&lt;br /&gt;
* '''CancelEditCommand''': Cancels the current editing session and discards all changes made at the PropertyViewModel level '''in that session''' (different from DiscardChangeCommand).&lt;br /&gt;
&lt;br /&gt;
{{Hint|Once again, you can use the [[Developer_Mode]] to find out more about the PropertyViewModel, like where they are available and how they can be accessed in XAML, or what other members are available underneath, etc.}}&lt;br /&gt;
&lt;br /&gt;
== Relevant types ==&lt;br /&gt;
Here are some types created for the purpose of property direct editing.&lt;br /&gt;
&lt;br /&gt;
=== PropertyDirectItemTemplateSelector ===&lt;br /&gt;
&lt;br /&gt;
This is used in a ListView-like control where item templates should be specified, in this case property item templates specifically. It determines the different DataTemplates to be used for direct editing PropertyViewModels according to their property types. For types that have default {{UBIK}} direct editing support, the template names follow the pattern of &amp;quot;UBIKPropertyDirectItemXXX&amp;quot; where XXX is the type name, e.g. String, DateTime, List, etc.&lt;br /&gt;
&lt;br /&gt;
For types that do not come with default direct editing support, the selector uses the &amp;quot;UBIKPropertyItem&amp;quot; template in which editor dialogs are shown instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:tpl=&amp;quot;using:UBIK.WinX.Templates&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:resources=&amp;quot;clr-namespace:UBIK.CPL.Resources;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TaskPropertyTemplateSelector ===&lt;br /&gt;
&lt;br /&gt;
By default, [[MRO_Objects_(Client)#Task|MRO tasks]] have direct editing enabled for their task related properties in the &amp;quot;UBIKTaskItem&amp;quot; template. This template selector determines the different DataTemplates to be used for direct editing PropertyViewModels according to their property types. For types that have default {{UBIK}} direct editing support, the template names follow the pattern of &amp;quot;UBIKTaskPropertyXXX&amp;quot; where XXX is the type name, e.g. String, DateTime, List, etc.&lt;br /&gt;
&lt;br /&gt;
For types that do not come with default direct editing support, the selector uses the &amp;quot;UBIKTaskProperty&amp;quot; template in which editor dialogs are shown instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:tpl=&amp;quot;using:UBIK.WinX.Templates&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:resources=&amp;quot;clr-namespace:UBIK.CPL.Resources;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ComboBoxItemTemplateSelector (UWP only) ===&lt;br /&gt;
&lt;br /&gt;
By default, a ComboBox uses the same template for the selected item (when closed) as well as the drop down items (when opened), which is not always wanted. This template selector allows you to use different templates for these two types of items.&lt;br /&gt;
&lt;br /&gt;
Namespace &amp;lt;code&amp;gt;xmlns:tpl=&amp;quot;using:UBIK.WinX.Templates&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tpl:ComboBoxItemTemplateSelector x:Key=&amp;quot;ComboBoxItemTemplateSelector&amp;quot; DropDownItemTemplate=&amp;quot;{StaticResource XXX}&amp;quot; ComboBoxSectionItemTemplate=&amp;quot;{StaticResource XXX}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* DropDownItemTemplate: for the dop down items (when opened)&lt;br /&gt;
* ComboBoxSectionItemTemplate: for the selected item (when closed)&lt;br /&gt;
&lt;br /&gt;
=== Behaviors and controls ===&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
The KeyEventTriggerBehavior is a specialized version of the EventTriggerBehavior in the way that it sets the event to KeyDown by default and allows customizers to define which key (KeyName) should trigger the action(s).&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TextBox ...&lt;br /&gt;
    xmlns:Core=&amp;quot;using:Microsoft.Xaml.Interactions.Core&amp;quot;&lt;br /&gt;
    xmlns:Interactivity=&amp;quot;using:Microsoft.Xaml.Interactivity&amp;quot;&lt;br /&gt;
    xmlns:behaviours=&amp;quot;using:UBIK.WinX.Behaviors&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviours:KeyEventTriggerBehavior KeyName=&amp;quot;Enter&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding ConfirmEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviours:KeyEventTriggerBehavior&amp;gt;&lt;br /&gt;
        &amp;lt;behaviours:KeyEventTriggerBehavior KeyName=&amp;quot;Escape&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Core:InvokeCommandAction Command=&amp;quot;{Binding CancelEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviours:KeyEventTriggerBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;/Interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/TextBox&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Xamarin&amp;quot;&amp;gt;&lt;br /&gt;
The SelectAllEntry optionally accepts two commands (ReturnCommand &amp;amp; EscapeCommand) to execute when a user inputs the return key {{key press|Enter}} and the escape key {{key press|Esc}} respecitively.&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid  xmlns:renderers=&amp;quot;clr-namespace:UBIK.CPL.Platform.Renderers;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;renderers:SelectAllEntry ...&lt;br /&gt;
        ReturnCommand=&amp;quot;{Binding ConfirmEditCommand}&amp;quot;&lt;br /&gt;
        EscapeCommand=&amp;quot;{Binding CancelEditCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Version 4.0|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:WinX|Property Direct Edit (Client)]]&lt;br /&gt;
[[Category:Xamarin|Property Direct Edit (Client)]]&lt;/div&gt;</summary>
		<author><name>BLE</name></author>	</entry>

	</feed>