Skip to content

Commit c7b55c6

Browse files
committed
Updated OnMaxTokensChanged method and improved MaxTokens test
1 parent 1309ca1 commit c7b55c6

File tree

2 files changed

+12
-17
lines changed

2 files changed

+12
-17
lines changed

Microsoft.Toolkit.Uwp.UI.Controls.Input/TokenizingTextBox/TokenizingTextBox.Properties.cs

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -170,28 +170,19 @@ private static void OnMaxTokensChanged(DependencyObject d, DependencyPropertyCha
170170
{
171171
if (d is TokenizingTextBox ttb && ttb.ReadLocalValue(MaxTokensProperty) != DependencyProperty.UnsetValue && e.NewValue is int newMaxTokens)
172172
{
173-
var tokenCount = ttb.Items.Count;
174-
if (tokenCount > newMaxTokens)
173+
var tokenCount = ttb._innerItemsSource.ItemsSource.Count;
174+
if (tokenCount > 0 && tokenCount > newMaxTokens)
175175
{
176176
int tokensToRemove = tokenCount - Math.Max(newMaxTokens, 0);
177-
var tokensRemoved = 0;
178177

179178
// Start at the end, remove any extra tokens.
180-
for (var i = ttb._innerItemsSource.Count - 1; i >= 0; --i)
179+
for (var i = tokenCount; i >= tokenCount - tokensToRemove; --i)
181180
{
182-
var item = ttb._innerItemsSource[i];
183-
if (item is not ITokenStringContainer)
184-
{
185-
// Force remove the items. No warning and no option to cancel.
186-
ttb._innerItemsSource.Remove(item);
187-
ttb.TokenItemRemoved?.Invoke(ttb, item);
188-
189-
tokensRemoved++;
190-
if (tokensRemoved == tokensToRemove)
191-
{
192-
break;
193-
}
194-
}
181+
var token = ttb._innerItemsSource.ItemsSource[i - 1];
182+
183+
// Force remove the items. No warning and no option to cancel.
184+
ttb._innerItemsSource.Remove(token);
185+
ttb.TokenItemRemoved?.Invoke(ttb, token);
195186
}
196187
}
197188
}

UnitTests/UnitTests.UWP/UI/Controls/Test_TokenizingTextBox_General.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ public void Test_MaxTokens()
101101
Assert.AreEqual(startingItemsCount + maxTokens, tokenBox.Items.Count, "Token Replace failed");
102102
Assert.AreEqual("TokenItem1", tokenBox.Items[0]);
103103
Assert.AreEqual("TokenItem3", tokenBox.Items[1]);
104+
105+
tokenBox.MaxTokens = 1;
106+
107+
Assert.AreEqual(1, tokenBox.Items.Count);
104108
}
105109
}
106110
}

0 commit comments

Comments
 (0)