Как мне выполнить цикл по списку с несколькими столбцами в WPF?

#c# #wpf #vb.net #visual-studio-2010 #listbox

#c# #wpf #vb.net #visual-studio-2010 #список

Вопрос:

Я новичок в WPF. Боюсь, это может показаться глупым вопросом.

У меня есть список с двумя столбцами. Каждый элемент списка содержит горизонтальную панель, которая, в свою очередь, содержит текстовые блоки.

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

(Я прикрепил соответствующую часть подраздела события, где пользователь добавляет новые строки.)

 Private Sub btnAddItem_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnAddSplit.Click

'...

Dim ListBoxItemName As New TextBlock
ListBoxItemName.Text = Name.Text
ListBoxItemName.Width = 170

Dim ListBoxItemValue As New TextBlock
ListBoxItemValue.Text = SplitValue.Text
ListBoxItemValue.Width = 70

Dim ListBoxStackPanel As New StackPanel
ListBoxStackPanel.Orientation = Orientation.Horizontal
ListBoxStackPanel.Children.Add(ListBoxItemName)
ListBoxStackPanel.Children.Add(ListBoxItemValue)

Dim NewEntry As New ListBoxItem
NewEntry.Content = ListBoxStackPanel

MyListBox.Items.Add(NewEntry)

'...

End Sub 
  

Я хотел бы иметь возможность проверять каждый раз, когда запускается вышеупомянутое событие, что столбец процентов не превышает 100%. У меня есть пара меток под самим списком, где я хотел бы показать текущую сумму и остаток.

Мои вопросы:

1) Как я могу выполнить цикл по второму столбцу процентов, чтобы показать текущую сумму и остаток?

2) Есть ли что-то более подходящее, чем ListBox, которое могло бы упростить это?

Я был бы признателен за любые рекомендации по решению этой проблемы, независимо от того, находится ли оно в VB или C #. Большое вам спасибо.

Ответ №1:

Судя по вашему образцу кода, похоже, что вы сталкиваетесь с теми же проблемами, с которыми я столкнулся, когда впервые начал работать с WPF. Трудно отказаться от этого мышления, основанного на коде, и принять привязку к данным, но я думаю, вам стоит попробовать. Вероятно, вы обнаружите, что оно того стоит.

В конечном счете, я думаю, что лучше всего было бы привязать некоторую коллекцию объектов к списку, а затем выполнить итерацию по этой коллекции, например…

<ListBox ItemsSource="{Binding StringPercentageCollection}" ... /> И привяжите ваши столбцы, или ваши текстовые блоки, или какой бы ни был ваш макет, к общедоступным свойствам «YourStringPercentageObject».

И тогда «StringPercentageCollection» может быть ObservableCollection (или какой-либо другой коллекцией) YourStringPercentageObject в контексте данных. Тогда вы сможете нормально перебирать наблюдаемую коллекцию.

Комментарии:

1. Спасибо за советы, вместо этого я рассмотрю этот подход. Привязка данных, вот и я!

Ответ №2:

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