Skip to content

Commit 988e0bc

Browse files
committed
2.3.0.1
1 parent ddb4d41 commit 988e0bc

5 files changed

Lines changed: 131 additions & 30 deletions

File tree

-93.4 KB
Binary file not shown.
94.1 KB
Binary file not shown.

Blazor.WebForm.Components/Base/ControlComponentBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ protected virtual void Dispose(bool disposing)
446446
{
447447
if (!_disposed)
448448
{
449-
(this.Control as IHandleUnload).Unload();
449+
(this as IHandleUnload).Unload(_events != null ? _events.RemoveAll : null);
450450
_disposed = true;
451451
}
452452
}

Blazor.WebForm.Components/Base/EventHandlerDictionary.cs

Lines changed: 126 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,38 +9,139 @@ namespace Blazor.WebForm.UI
99
{
1010
internal class EventHandlerDictionary
1111
{
12-
private class EventProperty
12+
private abstract class EventProperty
1313
{
14-
public object Handler { get; set; }
15-
public object BindHandler { get; set; }
14+
public abstract object Handler { get; set; }
1615

17-
public void Invoke(object sender, EventArgs e)
16+
public abstract object BindHandler { get; set; }
17+
18+
public abstract void Add();
19+
20+
public abstract void Remove();
21+
}
22+
23+
private class GeneralEventProperty : EventProperty
24+
{
25+
private readonly Action<EventHandler> _add;
26+
private readonly Action<EventHandler> _remove;
27+
private EventHandler _handler;
28+
private EventHandler _bindHandler;
29+
30+
public override object Handler
31+
{
32+
get
33+
{
34+
return _handler;
35+
}
36+
set
37+
{
38+
_handler = value as EventHandler;
39+
}
40+
}
41+
42+
public override object BindHandler
43+
{
44+
get
45+
{
46+
return _bindHandler;
47+
}
48+
set
49+
{
50+
_bindHandler = value as EventHandler;
51+
}
52+
}
53+
54+
public GeneralEventProperty(Action<EventHandler> add, Action<EventHandler> remove) : base()
55+
{
56+
_add = add;
57+
_remove = remove;
58+
}
59+
60+
public override void Add()
61+
{
62+
_add(this.Invoke);
63+
}
64+
65+
public override void Remove()
66+
{
67+
_remove(this.Invoke);
68+
}
69+
70+
private void Invoke(object sender, EventArgs e)
71+
{
72+
_bindHandler?.Invoke(sender, e);
73+
_handler?.Invoke(sender, e);
74+
}
75+
}
76+
77+
private class EventProperty<TEventArgs> : EventProperty
78+
{
79+
private readonly Action<EventHandler<TEventArgs>> _add;
80+
private readonly Action<EventHandler<TEventArgs>> _remove;
81+
private EventHandler<TEventArgs> _handler;
82+
private EventHandler<TEventArgs> _bindHandler;
83+
84+
public override object Handler
1885
{
19-
if (this.BindHandler is EventHandler bindHandler)
86+
get
2087
{
21-
bindHandler.Invoke(sender, e);
88+
return _handler;
2289
}
23-
if (this.Handler is EventHandler handler)
90+
set
2491
{
25-
handler.Invoke(sender, e);
92+
_handler = value as EventHandler<TEventArgs>;
2693
}
2794
}
2895

29-
public void Invoke<TEventArgs>(object sender, TEventArgs e)
96+
public override object BindHandler
3097
{
31-
if (this.BindHandler is EventHandler<TEventArgs> bindHandler)
98+
get
3299
{
33-
bindHandler.Invoke(sender, e);
100+
return _bindHandler;
34101
}
35-
if (this.Handler is EventHandler<TEventArgs> handler)
102+
set
36103
{
37-
handler.Invoke(sender, e);
104+
_bindHandler = value as EventHandler<TEventArgs>;
38105
}
39106
}
107+
108+
public EventProperty(Action<EventHandler<TEventArgs>> add, Action<EventHandler<TEventArgs>> remove)
109+
{
110+
_add = add;
111+
_remove = remove;
112+
}
113+
114+
public override void Add()
115+
{
116+
_add(this.Invoke);
117+
}
118+
119+
public override void Remove()
120+
{
121+
_remove(this.Invoke);
122+
}
123+
124+
private void Invoke(object sender, TEventArgs e)
125+
{
126+
_bindHandler?.Invoke(sender, e);
127+
_handler?.Invoke(sender, e);
128+
}
40129
}
41130

42131
private readonly ConcurrentDictionary<string, EventProperty> _events = new ConcurrentDictionary<string, EventProperty>();
43132

133+
public void RemoveAll()
134+
{
135+
if (!_events.IsEmpty)
136+
{
137+
foreach (EventProperty eventProperty in _events.Values)
138+
{
139+
eventProperty.Remove();
140+
}
141+
_events.Clear();
142+
}
143+
}
144+
44145
public bool HasEventProperty(string propertyName)
45146
{
46147
return _events.ContainsKey(propertyName);
@@ -68,14 +169,14 @@ public void SetEventProperty(EventHandler handler, Action<EventHandler> add, Act
68169
{
69170
if (handler != null)
70171
{
71-
EventProperty eventProperty = _events.AddOrUpdate(propertyName, this.CreateEventProperty, this.UpdateEventProperty, add);
172+
EventProperty eventProperty = _events.AddOrUpdate(propertyName, this.CreateEventProperty, this.UpdateEventProperty, (add, remove));
72173
eventProperty.Handler = handler;
73174
}
74175
else
75176
{
76177
if (_events.TryRemove(propertyName, out EventProperty eventProperty))
77178
{
78-
remove(eventProperty.Invoke);
179+
eventProperty.Remove();
79180
eventProperty.Handler = null;
80181
}
81182
}
@@ -85,14 +186,14 @@ public void SetEventProperty<TEventArgs>(EventHandler<TEventArgs> handler, Actio
85186
{
86187
if (handler != null)
87188
{
88-
EventProperty eventProperty = _events.AddOrUpdate(propertyName, this.CreateEventProperty, this.UpdateEventProperty, add);
189+
EventProperty eventProperty = _events.AddOrUpdate(propertyName, this.CreateEventProperty, this.UpdateEventProperty, (add, remove));
89190
eventProperty.Handler = handler;
90191
}
91192
else
92193
{
93194
if (_events.TryRemove(propertyName, out EventProperty eventProperty))
94195
{
95-
remove(eventProperty.Invoke);
196+
eventProperty.Remove();
96197
eventProperty.Handler = null;
97198
}
98199
}
@@ -114,26 +215,26 @@ public void SetBindEventProperty<TEventArgs>(string propertyName, EventHandler<T
114215
}
115216
}
116217

117-
private EventProperty CreateEventProperty(string propertyName, Action<EventHandler> add)
218+
private EventProperty CreateEventProperty(string propertyName, (Action<EventHandler> add, Action<EventHandler> remove) args)
118219
{
119-
EventProperty eventProperty = new EventProperty();
120-
add(eventProperty.Invoke);
220+
EventProperty eventProperty = new GeneralEventProperty(args.add, args.remove);
221+
eventProperty.Add();
121222
return eventProperty;
122223
}
123224

124-
private EventProperty UpdateEventProperty(string propertyName, EventProperty eventProperty, Action<EventHandler> add)
225+
private EventProperty UpdateEventProperty(string propertyName, EventProperty eventProperty, (Action<EventHandler> add, Action<EventHandler> remove) args)
125226
{
126227
return eventProperty;
127228
}
128229

129-
private EventProperty CreateEventProperty<TEventArgs>(string propertyName, Action<EventHandler<TEventArgs>> add)
230+
private EventProperty CreateEventProperty<TEventArgs>(string propertyName, (Action<EventHandler<TEventArgs>> add, Action<EventHandler<TEventArgs>> remove) args)
130231
{
131-
EventProperty eventProperty = new EventProperty();
132-
add(eventProperty.Invoke);
232+
EventProperty eventProperty = new EventProperty<TEventArgs>(args.add, args.remove);
233+
eventProperty.Add();
133234
return eventProperty;
134235
}
135236

136-
private EventProperty UpdateEventProperty<TEventArgs>(string propertyName, EventProperty eventProperty, Action<EventHandler<TEventArgs>> add)
237+
private EventProperty UpdateEventProperty<TEventArgs>(string propertyName, EventProperty eventProperty, (Action<EventHandler<TEventArgs>> add, Action<EventHandler<TEventArgs>> remove) args)
137238
{
138239
return eventProperty;
139240
}

Blazor.WebForm.Components/Blazor.WebForm.Components.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<TargetFramework>net6.0</TargetFramework>
4+
<TargetFramework>net7.0</TargetFramework>
55
<SignAssembly>true</SignAssembly>
66
<AssemblyOriginatorKeyFile>Blazor.WebForm.Components.pfx</AssemblyOriginatorKeyFile>
7-
<Version>2.2.0.7</Version>
7+
<Version>2.3.0.1</Version>
88
<RootNamespace>asp</RootNamespace>
99
<Copyright>Jurio li</Copyright>
1010
<AssemblyName>Blazor.WebForm.Components</AssemblyName>
@@ -17,8 +17,8 @@
1717

1818
<ItemGroup>
1919
<PackageReference Include="Applied" Version="1.2.1.7" />
20-
<PackageReference Include="Blazor.WebForm.UI" Version="2.2.0.7" />
21-
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="6.0.10" />
20+
<PackageReference Include="Blazor.WebForm.UI" Version="2.3.0.1" />
21+
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="7.0.0" />
2222
</ItemGroup>
2323

2424
<ItemGroup>

0 commit comments

Comments
 (0)