
https://github.com/ReflectionMagic/ReflectionMagic
Let’s see an example…
The Problem:

Solutions Recommended by the DevExpress Team:
- Include the ID property in the display value using a calculated property:
Make a Property Calculable
How to: Specify a Display Member for a Lookup Editor, Detail Form Caption, and more
However, in this case, IDs will be sorted as strings – i.e., 10 will be prior to 2. - Implement a custom Property Editor that configures the underlying Razor component as required: How to: Implement a Property Editor Based on a Custom Component (Blazor). For example, you can use the DxComboBox component. Alternatively, use a button edit that shows a popup ListView as shown in the following ticket: Blazor – How to display LookupPropertyEditor’s items in a popup window with the New action.
Our Solution
The XAFDefaultProperty is used as the display members in lookups.
Let’s say we have a XAF Win and Blazor app.
In Windows we are sorting the lookup by a different property than the Default Property. (Of course that sorting is not working on Blazor)
What we did (Only on Blazor)
public override void CustomizeTypesInfo(ITypesInfo typesInfo)
{
base.CustomizeTypesInfo(typesInfo);
typesInfo.FindTypeInfo(typeof(LookupCountry)).FindAttribute<XafDefaultPropertyAttribute>().AsDynamic().name = nameof(LookupCountry.Sort);
}
But then we have the issue that in Blazor the Display Member in the Lookups is now the Sort property.
Property Editor to the rescue
[PropertyEditor(typeof(LookupCountry), "LookupCountryLookupPropertyEditor", false)]
public class LookupCountryLookupPropertyEditor : LookupPropertyEditor
{
public LookupCountryLookupPropertyEditor(Type objectType, IModelMemberViewItem model) : base(objectType, model)
{
}
protected override void OnControlCreated()
{
base.OnControlCreated();
if (Control is DxComboBoxAdapter adapter)
{
adapter.ComponentModel.TextFieldName = nameof(LookupCountry.COUNTRY);
adapter.ComponentModel.ClearButtonDisplayMode = DevExpress.Blazor.DataEditorClearButtonDisplayMode.Never;
}
}
}
Important line:
adapter.ComponentModel.TextFieldName = nameof(LookupCountry.COUNTRY);
That’s it. Crisis averted.
What do you guys think of this trick -we have a lot more of those ๐
Lastly, don’t forget to add the reflection magic nuget packet to include the dark “magic” in your app.
Until next time. XAF out!