-
Notifications
You must be signed in to change notification settings - Fork 4
/
PictureItemListView.razor
61 lines (57 loc) · 2.3 KB
/
PictureItemListView.razor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
@using CustomEditorEF.Module.BusinessObjects;
@using Microsoft.AspNetCore.Components.Web
@if (Data is not null) {
<div class="row">
@foreach (var item in Data) {
<DxCheckBox Checked="@selectedItems.Contains(item)"
CssClass="col-auto"
CheckedChanged="@(async (bool isSelected) => await SelectItem(item, isSelected))">
<div style="cursor: pointer;" @onclick=@(async () => await ItemClick.InvokeAsync(item))>
@if (item.Image is null) {
<div class="border d-flex justify-content-center align-items-center"
style="height:150px; width: 104px;">
No image
</div>
}
else {
<img src="data:image/png;base64,@Convert.ToBase64String(item.Image)" [email protected]
style="height:150px; width: 104px;">
}
<div class="text-center" style="width: 104px;">
@item.Text
</div>
</div>
</DxCheckBox>
}
</div>
}
@code {
[Parameter] public IEnumerable<IPictureItem> Data { get; set; }
[Parameter] public EventCallback<IPictureItem> ItemClick { get; set; }
[Parameter] public EventCallback<IEnumerable<IPictureItem>> SelectionChanged { get; set; }
private List<IPictureItem> selectedItems = new();
protected override async Task OnParametersSetAsync() {
await base.OnParametersSetAsync();
var newSelectedItems = new List<IPictureItem>();
if (Data is not null) {
foreach (var item in Data) {
if (selectedItems.Contains(item)) {
newSelectedItems.Add(item);
}
}
}
if (!newSelectedItems.SequenceEqual(selectedItems)) {
await SelectionChanged.InvokeAsync(newSelectedItems);
}
selectedItems = newSelectedItems;
}
private async Task SelectItem(IPictureItem item, bool isSelected) {
if (isSelected) {
selectedItems.Add(item);
}
else {
selectedItems.Remove(item);
}
await SelectionChanged.InvokeAsync(selectedItems);
}
}