|}
* '''==== Values[MP_PROPERTY]''' ====* This is the most basic and performant way to bind to a property value. * This collection simply displays the 'true' value of a property, meaning that it is only useful displaying for simple valuesproperties, such as String, Int, Dbl, unformatted DateTime, etc. Properties that have a DisplayValue that is different from their true value, such as GUIDs or selective list items with labels , are not best displayed using this binding, however.* For complex iproperties, it can be still be used in the xaml for non-display purposes, and such as in combination with converters or commands. It is immediately present on the most basic content viewmodel (the ContentListItemViewModels used by child lists) without having to be loaded, and remains the best choice in most cases.* ''<tabs><tab name="Don't Do"><source lang = "XML">Command="{Binding NavigateToGuidCommand}" Command Parameter="{Binding Properties.AllItems[MP_GUID].Value}"</source></tab><tab name="Instead do"><source lang = "XML">Command="{Binding NavigateToGuidCommand}" Command Parameter="{Binding Values[MP_GUID]}"</source></tab></tabs> ==== PropertyItems[MP_PROPERTY]...''' ====This collection can be used when the Value collection does not suffice for displaying appropriate values. This PropertyViewModel presents more options than the simple Values collection, however, <u>it should still only be used for displaying text in the UI</u> as it bypasses the modern functionality offered by UBIK, such as user rights, locked states, etc.* The '''==== Properties.XItems[MP_PROPERTY]...''' ====These collections were created as a response to the criticism that earlier collections of like Values and PropertyItems did not exposing expose enough of a content object's data viewmodel to be useful to our ever more sophisticated custom UIs. These collections now provide the full PropertyViewModel, where all aspects of a property (including ''it's'' properties, such as Unit attached to Double, the seperate Min/Value/Max valueitems, Date and Time extracted from the DateTime property, Lon/Lat or Alt extracted from the Geo property, and many more) can be accessed in Bindings. ** However, the downside of accessing this huge viewmodel is the noticeable performance impact, as it loads all instances of properties for the context object, even though only one (MP_PROPERTY) is requested. This impact is felt especially when such as binding is used on an item template in a list with many content objects, of which each has many properties. ** These collections are [[Fast_Startup_(Client)|Lazy Loaded]]*, which means that they are not loaded by default, however, a single binding to that collection will load it. When used on an item template in a list, all viewmodels for all properties for all child items will simultaneously be loaded, leading to the performance impact described in this article.** "Properties.XItems" is not a real collection. The most frequently used collections are Properties.AllItems, Properties.VisibleItems, Properties.EditableItems, and Properties.ImportantItems (properties which fall into the [[UBIK_WinX_Client_Basics#High_priority_properties|Priority threshold]]). The number of properties delivered to a content object in each collection (for example; all, 80%, 40% and 10%, respectively) is also a consideration when estimating the performance impact of binding to these collections; simply put, use the smallest collection possible where the desired property is consistently located.* The '''==== PropertyByName[MP_PROPERTY]...''' ==== This collection was created to overcome the performance impact arising from using Properties.XItems, by individually loading the PropertyViewModel for the named property. However, note that the benefit only lasts while the binding is used sparingly; rendering performance will be roughly the same as loading the Properties collection after 3-5 uses on a single item template.
{{Hint|The Values[ ] collection delivers the property's value as a string. The equivalent for the other bindings (above shown as '...') is <code>{Binding Collection[PROPERTY_NAME].'''DisplayValue'''}</code>, however, the capability of these viewmodels goes far beyond the DisplayValue. Use [[Developer_Mode]] to learn more.}}
==== * Troubleshooting null property values ====