Skip to content

Commit 75e351d

Browse files
Implemented LayoutTemplate on ListView (#34)
* Set version to 0.4.0-preview1 * Introducing the 4 Web Forms event handlers for all components * Added OnDataBinding and OnDataBound event handlers * Added ItemDataBound event * Implement LayoutTemplate (#32) Co-authored-by: SQL-MisterMagoo <[email protected]>
1 parent 686f259 commit 75e351d

File tree

14 files changed

+480
-64
lines changed

14 files changed

+480
-64
lines changed

samples/AfterBlazorServerSide/Pages/ControlSamples/ListView/Index.razor

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22

33
<h2>ListView Component homepage</h2>
44

5-
<div>
6-
Other usage samples: <a href="./ControlSamples/ListView/ModelBinding">ModelBinding Sample</a>
7-
</div>
5+
<Nav />
86

97
<p>Here is a simple listview bound to a collection of widgets.</p>
108

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
@page "/ControlSamples/ListView/LayoutTest"
2+
3+
<h2>ListView Component homepage</h2>
4+
5+
<Nav />
6+
7+
<p>Testing a layout for the ListView</p>
8+
9+
<ListView @ref="simpleListView"
10+
runat="server"
11+
EnableViewState="false"
12+
Context="Item"
13+
ItemPlaceholderID="foo"
14+
ItemType="SharedSampleObjects.Models.Widget">
15+
<ItemTemplate>
16+
<tr>
17+
<th>@Item.Id</th>
18+
<td>@Item.Name</td>
19+
<td>@Item.Price.ToString("c")</td>
20+
<td>@Item.LastUpdate.ToString("d")</td>
21+
</tr>
22+
</ItemTemplate>
23+
<AlternatingItemTemplate>
24+
<tr class="bg-light">
25+
<th>@Item.Id</th>
26+
<td>@Item.Name</td>
27+
<td>@Item.Price.ToString("c")</td>
28+
<td>@Item.LastUpdate.ToString("d")</td>
29+
</tr>
30+
</AlternatingItemTemplate>
31+
<LayoutTemplate Context="itemPlaceHolder">
32+
<table class="table" id="robert">
33+
<thead>
34+
<tr>
35+
<th>Id</th>
36+
<th>Name</th>
37+
<th>Price</th>
38+
<th>Last Update</th>
39+
</tr>
40+
</thead>
41+
<tbody>
42+
@itemPlaceHolder
43+
</tbody>
44+
</table>
45+
</LayoutTemplate>
46+
</ListView>
47+
48+
@code {
49+
50+
BlazorWebFormsComponents.ListView<Widget> simpleListView { get; set; }
51+
52+
protected override void OnAfterRender(bool firstRender)
53+
{
54+
base.OnAfterRender(firstRender);
55+
56+
if (firstRender)
57+
{
58+
simpleListView.DataSource = Widget.SimpleWidgetList;
59+
simpleListView.DataBind();
60+
}
61+
62+
//base.OnParametersSet();
63+
64+
}
65+
}
66+

samples/AfterBlazorServerSide/Pages/ControlSamples/ListView/ModelBinding.razor

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
<h2>ListView ModelBinding Sample</h2>
44

5+
<Nav />
6+
57
<p>Here is a listview using ModelBinding to interact with widgets.</p>
68

79
<table class="table">
@@ -51,7 +53,8 @@
5153

5254
ListView<Widget> simpleListView;
5355

54-
IQueryable<SharedSampleObjects.Models.Widget> simpleListView_GetData(int max, int start, string sort, out int totalRowCount) {
56+
IQueryable<SharedSampleObjects.Models.Widget> simpleListView_GetData(int max, int start, string sort, out int totalRowCount)
57+
{
5558

5659
var outCollection = Widget.SimpleWidgetList.AsQueryable();
5760
totalRowCount = outCollection.Count();
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<div>
2+
Other usage samples:
3+
<NavLink href="/ControlSamples/ListView" class="component-link" Match="NavLinkMatch.All">Simple List View </NavLink> |
4+
<NavLink href="./ControlSamples/ListView/ModelBinding" class="component-link" Match="NavLinkMatch.All">ModelBinding Sample</NavLink>
5+
<NavLink href="./ControlSamples/ListView/LayoutTest" class="component-link" Match="NavLinkMatch.All">Layout Test</NavLink>
6+
</div>
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
@inherits TestComponentBase
2+
3+
<Fixture
4+
Test="FirstTest"
5+
>
6+
<ComponentUnderTest>
7+
<ListView Items="Widget.SimpleWidgetList"
8+
ItemType="Widget"
9+
OnDataBinding="DataBinding"
10+
OnDataBound="DataBound"
11+
OnItemDataBound="ItemDataBound"
12+
Context="Item">
13+
<ItemTemplate><span>@Item.Name</span></ItemTemplate>
14+
</ListView>
15+
</ComponentUnderTest>
16+
</Fixture>
17+
18+
19+
@code {
20+
21+
int databinding = 0;
22+
int databound = 0;
23+
int itemDatabound = 0;
24+
25+
void FirstTest(IRazorTestContext context)
26+
{
27+
28+
var cut = context.GetComponentUnderTest();
29+
30+
databinding.ShouldBeGreaterThan(0);
31+
databound.ShouldBeGreaterThan(0);
32+
itemDatabound.ShouldBeGreaterThanOrEqualTo(3);
33+
34+
cut.FindAll("span").Count().ShouldBe(3);
35+
36+
}
37+
38+
void DataBinding(EventArgs args) {
39+
databinding++;
40+
}
41+
42+
void DataBound(EventArgs args) {
43+
databound++;
44+
}
45+
46+
void ItemDataBound(ListViewItemEventArgs args) {
47+
itemDatabound++;
48+
}
49+
50+
51+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
@inherits TestComponentBase
2+
3+
<Fixture
4+
Test="FirstTest"
5+
>
6+
<ComponentUnderTest>
7+
<ListView Items="Widget.SimpleWidgetList"
8+
ItemType="Widget"
9+
Context="Item">
10+
<ItemTemplate><span>@Item.Name</span></ItemTemplate>
11+
<LayoutTemplate Context="itemPlaceholder">
12+
<div>
13+
<b>Header</b>
14+
<br/>
15+
@itemPlaceholder
16+
</div>
17+
</LayoutTemplate>
18+
</ListView>
19+
</ComponentUnderTest>
20+
</Fixture>
21+
22+
23+
@code {
24+
25+
void FirstTest(IRazorTestContext context)
26+
{
27+
28+
var cut = context.GetComponentUnderTest();
29+
30+
cut.FindAll("span").Count().ShouldBe(3);
31+
cut.FindAll("div").Count().ShouldBe(1);
32+
cut.FindAll("b").Count().ShouldBe(1);
33+
34+
}
35+
36+
37+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
@inherits TestComponentBase
2+
3+
<Fixture
4+
Test="FirstTest"
5+
>
6+
<ComponentUnderTest>
7+
<ListView Items="Widget.SimpleWidgetList" @ref="theListView"
8+
ItemType="Widget"
9+
OnInit="Init"
10+
OnLoad="Load"
11+
OnPreRender="PreRender"
12+
OnUnload="Unload"
13+
OnDisposed="MyDispose"
14+
Context="Item">
15+
<ItemTemplate><span>@Item.Name</span></ItemTemplate>
16+
</ListView>
17+
</ComponentUnderTest>
18+
</Fixture>
19+
20+
21+
@code {
22+
23+
ListView<Widget> theListView;
24+
25+
int initialized = 0;
26+
int loaded = 0;
27+
int preRendered = 0;
28+
int unloaded = 0;
29+
30+
bool disposed = false;
31+
32+
void FirstTest(IRazorTestContext context)
33+
{
34+
35+
var cut = context.GetComponentUnderTest();
36+
37+
initialized.ShouldBe(1);
38+
loaded.ShouldBe(1);
39+
preRendered.ShouldBe(1);
40+
unloaded.ShouldBe(1);
41+
42+
cut.FindAll("span").Count().ShouldBe(3);
43+
44+
theListView.DisposeAsync().GetAwaiter().GetResult();
45+
46+
disposed.ShouldBeTrue();
47+
48+
}
49+
50+
void Init(EventArgs args)
51+
{
52+
initialized++;
53+
}
54+
55+
void Load(EventArgs args)
56+
{
57+
loaded++;
58+
}
59+
60+
void PreRender(EventArgs args)
61+
{
62+
preRendered++;
63+
}
64+
65+
void Unload(EventArgs args)
66+
{
67+
unloaded++;
68+
}
69+
70+
void MyDispose(EventArgs args) {
71+
disposed = true;
72+
}
73+
74+
75+
}

src/BlazorWebFormsComponents/BaseModelBindingComponent.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,19 @@ protected override void OnAfterRender(bool firstRender)
5757

5858
protected virtual void HandleUnknownAttributes() { }
5959

60+
#region Data Binding Events
61+
62+
[Parameter]
63+
public EventCallback<EventArgs> OnDataBinding { get; set; }
64+
65+
[Parameter]
66+
public EventCallback<EventArgs> OnDataBound { get; set; }
67+
68+
[Parameter]
69+
public EventCallback<ListViewItemEventArgs> OnItemDataBound { get; set; }
70+
71+
#endregion
72+
6073
}
6174

6275
}

0 commit comments

Comments
 (0)