2016-12-07 4 views
0

Вид трудно объяснить, но у меня есть WrapPanel, который включает данные, которые отображаются на основе индекса i. Индекс i изменяется в зависимости от того, выбирает ли пользователь что-то из ComboBox. Проблема заключается в том, когда пользователь выбирает новый параметр из ComboBox, новый обертывание/данные перекрывают предыдущий обертку/данные. Я хочу, чтобы первый начальный обертка отображался, а затем, когда выбран SelectedIndex, предыдущий обертку должен быть скрыт, а новый обертку - на новом индексе, который будет показан. Вот некоторые примеры кода:C# WPF WrapPanel Issue

private void fillColumns(int i, int colIndex, int rowIndex) //Called each time SelectedIndex is changed. 
{ 
    System.Windows.Controls.WrapPanel wrap1 = new System.Windows.Controls.WrapPanel(); 
    wrap1.Orientation = System.Windows.Controls.Orientation.Vertical; 
    wrap1.HorizontalAlignment = System.Windows.HorizontalAlignment.Center; 
    wrap1.Margin = new Thickness(2, 2, 2, 2); 

    System.Windows.Controls.TextBlock courseTextBlock = new System.Windows.Controls.TextBlock(); 
    courseTextBlock.Inlines.Add(new Run("Course: ") { Foreground = Brushes.Purple, FontWeight = FontWeights.Bold }); 
    courseTextBlock.Inlines.Add(returnedTable.Tables[0].Rows[i]["course_prefix"].ToString() + " " + returnedTable.Tables[0].Rows[i]["course_num"].ToString()); 
    courseTextBlock.Margin = new Thickness(2, 2, 2, 2); 
    wrap1.Children.Add(courseTextBlock); 

    Grid.SetColumn(wrap1, colIndex); 
    Grid.SetRow(wrap1, rowIndex); 
    tabGrid1.Children.Add(wrap1) 
    //Clear WrapPanel after user chooses new ComboBox option? 
} 
+0

Часто в WPF вы указываете элемент управления в представлении (XAML) и привязываете содержимое к свойству ViewModel. Представление будет знать, чтобы обновить его содержимое, когда вы сообщите ему, что свойства были изменены. Поэтому я подозреваю, что вам может потребоваться уведомить ваше мнение об обновлении – ne1410s

+0

Можете ли вы попробовать 'tabGrid1.Children.Insert (wrap1)'? – ViVi

ответ

0

Это немного непонятно, как называется этот код, и как переменные colIndex и RowIndex относятся к ComboBox, но при условии, I переменная, которая меняется, казалось бы, что проблема что каждый раз, когда выбор ComboBox изменяется, содержимое на основе строки i добавляется в ячейку сетки в позиции (colIndex, rowIndex) в дополнение к любому содержимому, уже присутствующему в этой ячейке, а не заменяет его.

Самый простой способ изменения текущего кода - очистить ячейку сетки перед добавлением wrap1 в сетку. например

Заменить

tabGrid1.Children.Add(wrap1) 

с

// Remove any existing content at this position in the grid 
foreach (var existingContent in (from cell in tabGrid1.Children where Grid.GetRow(cell) == rowIndex && Grid.GetColumn(cell) == colIndex select cell).ToArray()) 
{ 
    tabGrid1.Children.Remove(existingContent); 
} 

// add the new content 
tabGrid1.Children.Add(wrap1); 

Это не особенно элегантно, хотя, и dynamicaly установки или связывания с содержанием TextBlock было бы предпочтительнее, чтобы создавать новый каждый раз.

Смежные вопросы