blazor-devexpress-dot-blazor-dot-dxmenu-ac158a7f.md
Specifies data mappings.
Namespace : DevExpress.Blazor
Assembly : DevExpress.Blazor.v25.2.dll
NuGet Package : DevExpress.Blazor
[Parameter]
public RenderFragment DataMappings { get; set; }
| Type | Description |
|---|---|
| RenderFragment |
A UI fragment to be rendered as menu items.
|
You can populate the Menu component with items from a data source.
Follow the steps below to bind Menu to data:
Use the Data property to specify a data source. You can use different collection types:
Add the DataMappings tag to the component’s markup.
Create the DxMenuDataMapping instance and map item properties (BeginGroup, CssClass, and so on) to data source fields. Mappings are used to assign data from the source collection to the component’s data model.
The following code snippet loads menu items from the TextFormattingMenu class. Each menu item has child items. The code specifies the Children and Text mappings to adjust the menu data model to the specified data source.
<div class="card menu-card-container w-100">
<div class="card-header p-0 fw-normal">
<DxMenu ItemClick="@(e => ((TextFormattingMenuItem)e.ItemInfo.Data).Click())"
Data="@MenuItems"
SizeMode="@Params.SizeMode">
<DataMappings>
<DxMenuDataMapping Text="Text"
Children="Children"
BeginGroup="BeginGroup"
CssClass="CssClass"
Enabled="Enabled" />
</DataMappings>
</DxMenu>
</div>
<div class="card-body">
<div class="menu-card-text-container">
<span class="demo-preventsel">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sit amet metus vel nisi blandit tincidunt vel efficitur purus. Nunc nec turpis tempus, accumsan orci auctor, imperdiet mauris. Fusce id purus magna.</span>
</div>
</div>
</div>
@code {
List<TextFormattingMenuItem> menuItems;
List<TextFormattingMenuItem> MenuItems => menuItems = menuItems ?? TextFormattingMenu.MenuItems(Formatting);
TextFormatting Formatting { get; } = new TextFormatting();
}
using System.Collections.Generic;
using System.Linq;
namespace BlazorDemo.Data {
public class TextFormatting {
public Dictionary<string, bool> Decoration { get; } = new Dictionary<string, bool>() {
{ "Bold", false },
{ "Italic" , false },
{ "Underline" , false },
{ "Strikethrough" , false },
{ "Overline" , false }
};
public string FontFamily { get; set; }
public int FontSize { get; set; }
public string TextCase { get; set; }
string GetTextDecoration() {
string textDecoration = "";
if(Decoration["Underline"])
textDecoration += "underline";
if(Decoration["Overline"])
textDecoration += " overline";
if(Decoration["Strikethrough"])
textDecoration += " line-through";
return textDecoration;
}
public string GetStyleString() {
string style = "";
if(!string.IsNullOrEmpty(FontFamily))
style += $"font-family: {FontFamily}; ";
if(FontSize > 0)
style += $"font-size: {FontSize}pt; ";
if(Decoration["Bold"])
style += "font-weight: bold; ";
if(Decoration["Italic"])
style += "font-style: italic; ";
if(!string.IsNullOrEmpty(TextCase))
style += $"text-transform: {TextCase}; ";
string textDecoration = GetTextDecoration();
if(!string.IsNullOrEmpty(textDecoration))
style += $"text-decoration: {textDecoration};";
return !string.IsNullOrEmpty(style) ? style : null;
}
public bool IsStyleChanged() {
return TextCase != null || FontFamily != null || FontSize != 0 || Decoration.Values.Any(x => x);
}
public void ClearFormatting() {
TextCase = null;
FontFamily = null;
FontSize = 0;
Decoration["Bold"] = false;
Decoration["Italic"] = false;
Decoration["Underline"] = false;
Decoration["Overline"] = false;
Decoration["Strikethrough"] = false;
}
}
}
using System.Collections.Generic;
namespace BlazorDemo.Data {
static class TextFormattingMenu {
public static TextFormattingMenuItem FontFamilyMenuItem(TextFormatting textFormatting) =>
new TextFormattingParentMenuItem(textFormatting, "Font", new List<TextFormattingMenuItem>() {
new FontFamilyMenuItem(textFormatting, "Times New Roman", "Times New Roman"),
new FontFamilyMenuItem(textFormatting, "Tahoma", "Tahoma"),
new FontFamilyMenuItem(textFormatting, "Verdana", "Verdana"),
new FontFamilyMenuItem(textFormatting, "Arial", "Arial"),
new FontFamilyMenuItem(textFormatting, "MS Sans Serif", "MS Sans Serif"),
new FontFamilyMenuItem(textFormatting, "Courier", "Courier"),
new FontFamilyMenuItem(textFormatting, "Segoe UI", "Segoe UI"),
new FontFamilyMenuItem(textFormatting, "Default", null) { BeginGroup = true, IconCss = "menu-icon menu-icon-check" }
});
public static TextFormattingMenuItem FontSizeMenuItem(TextFormatting textFormatting) =>
new TextFormattingParentMenuItem(textFormatting, "Size", new List<TextFormattingMenuItem>() {
new FontSizeMenuItem(textFormatting, "8pt", 8),
new FontSizeMenuItem(textFormatting, "10pt", 10),
new FontSizeMenuItem(textFormatting, "12pt", 12),
new FontSizeMenuItem(textFormatting, "14pt", 14),
new FontSizeMenuItem(textFormatting, "18pt", 18),
new FontSizeMenuItem(textFormatting, "24pt", 24),
new FontSizeMenuItem(textFormatting, "36pt", 36),
new FontSizeMenuItem(textFormatting, "Default", 0) { BeginGroup = true }
});
// ...
public static List<TextFormattingMenuItem> MenuItems(TextFormatting textFormatting) =>
new List<TextFormattingMenuItem>() {
FontFamilyMenuItem(textFormatting),
FontSizeMenuItem(textFormatting),
new ClearFormattingMenuItem(textFormatting) { BeginGroup = false }
};
}
}
See Also