Skip to content

Commit 494b804

Browse files
committed
2.3.0.3
1 parent 988e0bc commit 494b804

16 files changed

Lines changed: 69 additions & 102 deletions
-94.1 KB
Binary file not shown.
94.6 KB
Binary file not shown.

Blazor.WebForm.Components/Base/ControlComponentBase.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -266,11 +266,6 @@ protected override void OnInitialized()
266266
}
267267
}
268268

269-
protected bool HasEventProperty(string propertyName)
270-
{
271-
return _events != null && _events.HasEventProperty(propertyName);
272-
}
273-
274269
protected bool HasPropertyBindEvent<TValue>(string propertyName)
275270
{
276271
if (_attributes != null

Blazor.WebForm.Components/Base/ControlParameterViewComponentExtensions.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,14 +152,14 @@ public static void SetEventProperty<TEventArgs>(this IParameterViewComponent com
152152
component.Events.SetEventProperty(handler, add, remove, propertyName);
153153
}
154154

155-
public static void SetBindEventProperty(this IParameterViewComponent component, string propertyName, EventHandler bindHandler)
155+
public static void SetBindEventProperty(this IParameterViewComponent component, string propertyName, EventHandler bindHandler, Action<EventHandler> add, Action<EventHandler> remove)
156156
{
157-
component.Events.SetBindEventProperty(propertyName, bindHandler);
157+
component.Events.SetBindEventProperty(propertyName, bindHandler, add, remove);
158158
}
159159

160-
public static void SetBindEventProperty<TEventArgs>(this IParameterViewComponent component, string propertyName, EventHandler<TEventArgs> bindHandler)
160+
public static void SetBindEventProperty<TEventArgs>(this IParameterViewComponent component, string propertyName, EventHandler<TEventArgs> bindHandler, Action<EventHandler<TEventArgs>> add, Action<EventHandler<TEventArgs>> remove)
161161
{
162-
component.Events.SetBindEventProperty(propertyName, bindHandler);
162+
component.Events.SetBindEventProperty(propertyName, bindHandler, add, remove);
163163
}
164164

165165
public static string ConvertToString<TValue>(this IParameterViewComponent component, TValue value)

Blazor.WebForm.Components/Base/EventHandlerDictionary.cs

Lines changed: 49 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ private abstract class EventProperty
1515

1616
public abstract object BindHandler { get; set; }
1717

18+
public abstract bool IsEmpty { get; }
19+
1820
public abstract void Add();
1921

2022
public abstract void Remove();
@@ -51,7 +53,15 @@ public override object BindHandler
5153
}
5254
}
5355

54-
public GeneralEventProperty(Action<EventHandler> add, Action<EventHandler> remove) : base()
56+
public override bool IsEmpty
57+
{
58+
get
59+
{
60+
return _handler == null && _bindHandler == null;
61+
}
62+
}
63+
64+
public GeneralEventProperty(Action<EventHandler> add, Action<EventHandler> remove)
5565
{
5666
_add = add;
5767
_remove = remove;
@@ -105,6 +115,14 @@ public override object BindHandler
105115
}
106116
}
107117

118+
public override bool IsEmpty
119+
{
120+
get
121+
{
122+
return _handler == null && _bindHandler == null;
123+
}
124+
}
125+
108126
public EventProperty(Action<EventHandler<TEventArgs>> add, Action<EventHandler<TEventArgs>> remove)
109127
{
110128
_add = add;
@@ -142,11 +160,6 @@ public void RemoveAll()
142160
}
143161
}
144162

145-
public bool HasEventProperty(string propertyName)
146-
{
147-
return _events.ContainsKey(propertyName);
148-
}
149-
150163
public EventHandler GetEventProperty(string propertyName)
151164
{
152165
if (_events.TryGetValue(propertyName, out EventProperty eventProperty))
@@ -167,52 +180,58 @@ public EventHandler<TEventArgs> GetEventProperty<TEventArgs>(string propertyName
167180

168181
public void SetEventProperty(EventHandler handler, Action<EventHandler> add, Action<EventHandler> remove, string propertyName)
169182
{
170-
if (handler != null)
171-
{
172-
EventProperty eventProperty = _events.AddOrUpdate(propertyName, this.CreateEventProperty, this.UpdateEventProperty, (add, remove));
173-
eventProperty.Handler = handler;
174-
}
175-
else
176-
{
177-
if (_events.TryRemove(propertyName, out EventProperty eventProperty))
178-
{
179-
eventProperty.Remove();
180-
eventProperty.Handler = null;
181-
}
182-
}
183+
this.SetEventProperty(handler, this.CreateEventProperty, (add, remove), propertyName);
183184
}
184185

185186
public void SetEventProperty<TEventArgs>(EventHandler<TEventArgs> handler, Action<EventHandler<TEventArgs>> add, Action<EventHandler<TEventArgs>> remove, string propertyName)
186187
{
188+
this.SetEventProperty(handler, this.CreateEventProperty, (add, remove), propertyName);
189+
}
190+
191+
private void SetEventProperty<TArg>(object handler, Func<string, TArg, EventProperty> eventPropertyFactory, TArg factoryArgument, string propertyName)
192+
{
193+
EventProperty eventProperty;
187194
if (handler != null)
188195
{
189-
EventProperty eventProperty = _events.AddOrUpdate(propertyName, this.CreateEventProperty, this.UpdateEventProperty, (add, remove));
196+
eventProperty = _events.GetOrAdd(propertyName, eventPropertyFactory, factoryArgument);
190197
eventProperty.Handler = handler;
191198
}
192-
else
199+
else if (_events.TryGetValue(propertyName, out eventProperty))
193200
{
194-
if (_events.TryRemove(propertyName, out EventProperty eventProperty))
201+
eventProperty.Handler = null;
202+
if (eventProperty.IsEmpty && _events.TryRemove(propertyName, out eventProperty))
195203
{
196204
eventProperty.Remove();
197-
eventProperty.Handler = null;
198205
}
199206
}
200207
}
201208

202-
public void SetBindEventProperty(string propertyName, EventHandler bindHandler)
209+
public void SetBindEventProperty(string propertyName, EventHandler bindHandler, Action<EventHandler> add, Action<EventHandler> remove)
203210
{
204-
if (bindHandler != null && _events.TryGetValue(propertyName, out EventProperty eventProperty))
205-
{
206-
eventProperty.BindHandler = bindHandler;
207-
}
211+
this.SetBindEventProperty(propertyName, bindHandler, this.CreateEventProperty, (add, remove));
212+
}
213+
214+
public void SetBindEventProperty<TEventArgs>(string propertyName, EventHandler<TEventArgs> bindHandler, Action<EventHandler<TEventArgs>> add, Action<EventHandler<TEventArgs>> remove)
215+
{
216+
this.SetBindEventProperty(propertyName, bindHandler, this.CreateEventProperty, (add, remove));
208217
}
209218

210-
public void SetBindEventProperty<TEventArgs>(string propertyName, EventHandler<TEventArgs> bindHandler)
219+
private void SetBindEventProperty<TArg>(string propertyName, object bindHandler, Func<string, TArg, EventProperty> eventPropertyFactory, TArg factoryArgument)
211220
{
212-
if (bindHandler != null && _events.TryGetValue(propertyName, out EventProperty eventProperty))
221+
EventProperty eventProperty;
222+
if (bindHandler != null)
213223
{
224+
eventProperty = _events.GetOrAdd(propertyName, eventPropertyFactory, factoryArgument);
214225
eventProperty.BindHandler = bindHandler;
215226
}
227+
else if (_events.TryGetValue(propertyName, out eventProperty))
228+
{
229+
eventProperty.BindHandler = null;
230+
if (eventProperty.IsEmpty && _events.TryRemove(propertyName, out eventProperty))
231+
{
232+
eventProperty.Remove();
233+
}
234+
}
216235
}
217236

218237
private EventProperty CreateEventProperty(string propertyName, (Action<EventHandler> add, Action<EventHandler> remove) args)
@@ -222,21 +241,11 @@ private EventProperty CreateEventProperty(string propertyName, (Action<EventHand
222241
return eventProperty;
223242
}
224243

225-
private EventProperty UpdateEventProperty(string propertyName, EventProperty eventProperty, (Action<EventHandler> add, Action<EventHandler> remove) args)
226-
{
227-
return eventProperty;
228-
}
229-
230244
private EventProperty CreateEventProperty<TEventArgs>(string propertyName, (Action<EventHandler<TEventArgs>> add, Action<EventHandler<TEventArgs>> remove) args)
231245
{
232246
EventProperty eventProperty = new EventProperty<TEventArgs>(args.add, args.remove);
233247
eventProperty.Add();
234248
return eventProperty;
235249
}
236-
237-
private EventProperty UpdateEventProperty<TEventArgs>(string propertyName, EventProperty eventProperty, (Action<EventHandler<TEventArgs>> add, Action<EventHandler<TEventArgs>> remove) args)
238-
{
239-
return eventProperty;
240-
}
241250
}
242251
}

Blazor.WebForm.Components/Base/ListControlComponent.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ namespace Blazor.WebForm.UI.ControlComponents
1212
public abstract class ListControlComponent<TControl> : DataBoundControlComponent<TControl>
1313
where TControl : ListControl, new()
1414
{
15+
internal const string OnDataBindingSelectedIndexChanged = "OnDataBindingSelectedIndexChanged";
16+
1517
private bool _hasBindSelectedValue;
1618

1719
[Parameter]
@@ -203,12 +205,8 @@ protected override void OnInitialized()
203205
{
204206
_hasBindSelectedValue = true;
205207
this.Control.AutoPostBack = true;
206-
this.Control.SelectedIndexChanged += this.BindSelectedIndexChanged;
207-
((IBindingListControl)this.Control).DataBindingSelectedIndexChanged += this.BindSelectedIndexChanged;
208-
if (this.HasEventProperty(nameof(this.OnSelectedIndexChanged)))
209-
{
210-
this.SetBindEventProperty(nameof(this.OnSelectedIndexChanged), this.BindSelectedIndexChanged);
211-
}
208+
this.SetBindEventProperty(nameof(this.OnSelectedIndexChanged), this.BindSelectedIndexChanged, i => this.Control.SelectedIndexChanged += i, i => this.Control.SelectedIndexChanged -= i);
209+
this.SetBindEventProperty(OnDataBindingSelectedIndexChanged, this.BindSelectedIndexChanged, i => ((IBindingListControl)this.Control).DataBindingSelectedIndexChanged += i, i => ((IBindingListControl)this.Control).DataBindingSelectedIndexChanged -= i);
212210
}
213211
}
214212

Blazor.WebForm.Components/Base/MultipleSelectionListControlComponent.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,8 @@ protected override void OnInitialized()
8282
if (this.HasPropertyBindEvent<string[]>(nameof(this.SelectedValues)))
8383
{
8484
this.Control.AutoPostBack = true;
85-
this.Control.SelectedIndexChanged += this.BindSelectedIndexChanged;
86-
if (this.HasEventProperty(nameof(this.OnSelectedIndexChanged)))
87-
{
88-
this.SetBindEventProperty(nameof(this.OnSelectedIndexChanged), this.BindSelectedIndexChanged);
89-
}
85+
this.SetBindEventProperty(nameof(this.OnSelectedIndexChanged), this.BindSelectedIndexChanged, i => this.Control.SelectedIndexChanged += i, i => this.Control.SelectedIndexChanged -= i);
86+
this.SetBindEventProperty(OnDataBindingSelectedIndexChanged, this.BindSelectedIndexChanged, i => ((IBindingListControl)this.Control).DataBindingSelectedIndexChanged += i, i => ((IBindingListControl)this.Control).DataBindingSelectedIndexChanged -= i);
9087
}
9188
}
9289

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFramework>net7.0</TargetFramework>
55
<SignAssembly>true</SignAssembly>
66
<AssemblyOriginatorKeyFile>Blazor.WebForm.Components.pfx</AssemblyOriginatorKeyFile>
7-
<Version>2.3.0.1</Version>
7+
<Version>2.3.0.3</Version>
88
<RootNamespace>asp</RootNamespace>
99
<Copyright>Jurio li</Copyright>
1010
<AssemblyName>Blazor.WebForm.Components</AssemblyName>
@@ -17,7 +17,7 @@
1717

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

Blazor.WebForm.Components/Calendar.razor

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -354,11 +354,7 @@
354354
base.OnInitialized();
355355
if (this.HasPropertyBindEvent<DateTime>(nameof(this.SelectedDate)))
356356
{
357-
this.Control.SelectionChanged += this.BindSelectionChanged;
358-
if (this.HasEventProperty(nameof(this.OnSelectionChanged)))
359-
{
360-
this.SetBindEventProperty(nameof(this.OnSelectionChanged), this.BindSelectionChanged);
361-
}
357+
this.SetBindEventProperty(nameof(this.OnSelectionChanged), this.BindSelectionChanged, i => this.Control.SelectionChanged += i, i => this.Control.SelectionChanged -= i);
362358
}
363359
}
364360

Blazor.WebForm.Components/CheckBox.razor

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,7 @@
134134
if (this.HasPropertyBindEvent<bool>(nameof(this.Checked)))
135135
{
136136
this.Control.AutoPostBack = true;
137-
this.Control.CheckedChanged += this.BindCheckedChanged;
138-
if (this.HasEventProperty(nameof(this.OnCheckedChanged)))
139-
{
140-
this.SetBindEventProperty(nameof(this.OnCheckedChanged), this.BindCheckedChanged);
141-
}
137+
this.SetBindEventProperty(nameof(this.OnCheckedChanged), this.BindCheckedChanged, i => this.Control.CheckedChanged += i, i => this.Control.CheckedChanged -= i);
142138
}
143139
}
144140

0 commit comments

Comments
 (0)