#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:
Я бы отслеживал процент в другом поле, если это возможно. Это отделило бы вашу реализацию от вашего пользовательского интерфейса, что, как правило, является хорошей идеей.