אני מפתח תוסף חיפוש Regex עבור Word, שבו אני רוצה לאפשר למשתמש חיפוש מתקדם לפי צבעים במסמך.
מכיוון שאין אפשרות מובנית בוורד לשלוף את כל הצבעים במסמך (והרשימה המובנית של wdcolor ממש לא מכסה את כל הצבעים שיש.), אני שולף אותם ישירות מתוך ה-XML של המסמך באמצעות הקוד הבא:
public HashSet<string> ExtractColorsFromXml()
{
string xml = ActiveDocument.Content.WordOpenXML;
HashSet<string> colors = new HashSet<string>();
// Regex to match color values in w:color attributes (e.g., <w:color w:val="C45911"/>)
Regex colorRegex = new Regex(@"w:color\s+w:val=""([A-z0-9]+)""", RegexOptions.IgnoreCase);
foreach (Match match in colorRegex.Matches(xml))
{
colors.Add("#" + match.Groups[1].Value);
}
return colors;
}
כדי שהמשתמש יקבל תמיד את רשימת הצבעים העדכנית (למקרה שהצבעים במסמך השתנו), אני רוצה לוודא שהקומבו בוקס מתעדכן בכל פעם שהוא נפתח.
ניסיתי לעדכן את הנתונים כאשר הרשימה נפתחת כך:
private async void ColorDropDownOpened(object sender, EventArgs e)
{
if (sender is ComboBox comboBox)
comboBox.ItemsSource = new ColorsModel().Colors;
}
יש משהו שנתקע אם פותחים את הרשימה יותר מפעם אחת ברצף - אא"כ מחכים קצת.
אבל יש תקיעות אם פותחים את הרשימה כמה פעמים ברצף – אלא אם מחכים מעט.
שאלתי היא:
מהי הדרך האופטימלית לגרום לרשימה להתעדכן בכל פעם שהיא נפתחת, מבלי לגרום לתקיעות?
האם יש דרך לעשות זאת ישר דרך ה-viewmodel? והאם זה יעזור לתקיעות הנ"ל?
נ.ב. כמו"כ אשמח לדעת אם רגקס זה הדרך האופטלית לשלוף את הצבעים או שיש דרך מובנית יותר טובה ויותר מהירה להתעסק עם ה-xml.