У меня есть наблюдаемая коллекция OBSCollection, которую я разбираю. В этой коллекции я проверяю, является ли свойство имени «критическим», и если оно «критично», то я пытаюсь динамически создавать красные кнопки для каждого появления свойства.Создание кнопок динамически из наблюдаемой коллекции
if (OBSCollection.Any(p => p.Name == "Critical"))
{
criticalcount = OBSCollection.Where(x => x.Name == "Critical").ToList().Count;
for (int i = 0; i < criticalcount; i++)
{
Button temp = new Button();
temp.Background = new SolidColorBrush(Windows.UI.Colors.Red);
temp.Width = 200;
temp.Height = 100;
temp.Content = "Critical";
CriticalPanel.Children.Add(temp);
temp.Tapped += new TappedEventHandler(bTapped_Tapped);
}
private void bTapped_Tapped(object sender, TappedRoutedEventArgs e)
{
var toremovecritical = OBSCOllection.Where(x => x.Name == "critical").First();
uiElements.Remove(toremovecritical);
}
Теперь приведенный выше код работает только в том случае, если существует одно свойство «Критическое». Как я могу переписать код для работы в нескольких случаях и, следовательно, создать несколько кнопок?
Также после отображения кнопок, если пользователь нажимает кнопку, свойство видимости кнопок должно быть свернуто и этот конкретный элемент должен быть удален из наблюдаемой коллекции. Я могу удалить кнопку из наблюдаемой коллекции, но я не могу установить для свойства видимости кнопки значение false из обработчика bTapped_Tapped. Есть ли способ разрешить это?
не отвечает на ваш прямой вопрос, но IMHO это кричит для шаблона данных (в вашем ListView или GridView), который включает в себя кнопку и устанавливает видимость на Visible, когда значение Name является «Critical» (через конвертер в привязке). Таким образом, вы удаляете весь код (за исключением обработки нажатия кнопок) и сохраняете разделение проблем между вашим представлением (Button) и вашим ViewModel (OBSCollection). –
Если вы поставили точку останова на итерации, у вас есть критический граф выше thant 1? Кроме того, если вы поставили точку останова после итерации, если вы проверите CriticalPanel.Children, у вас есть более одного ребенка? – Oliver
@Oliver прямо сейчас, я знаю, что у меня есть только один ребенок, поэтому код работает. Моя проблема в том, что если существует более 1 «критического», тогда мой код попытается создать несколько кнопок с тем же именем, что вызовет ошибку. – Boncek35