У меня есть ListBox
, который отображает динамическое число TextBox
es. Пользователь вводит текст в эти поля. При нажатии на кнопку Submit щелкают, мне нужно, чтобы иметь возможность получить доступ к тексту пользователь имеет вход, должен быть ListBox.Items
, например, так:Listbox Not Tracking User Input
//Called on Submit button click
private void SaveAndSubmit(object sender, ExecutedRoutedEventArgs e)
{
var bounds = MyListBox.Items;
}
Но MyListBox.Items
не меняется после того, как я сначала установить ItemsSource
, здесь :
//Field declaration
//Bounds is containing a group of strings that represent the boundaries
//for a contour plot. The min/max values are stored at the front and back
//of the group. However, there can be any number of dividers in between.
public ObservableCollection<string> Bounds { get; set; }
...
//Initialize Bounds in the constructor
//Called when the selected item for DVList (an unrelated ListBox) is changed
private void DVSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selectedDV = DVList.SelectedItem as DVWrapper;
if (selectedDV != null)
{
//Setting min/max
Bounds[0] = selectedDV.MinValue;
Bounds[Bounds.Count - 1] = selectedDV.MaxValue;
MyListBox.ItemsSource = Bounds;
}
}
Моя XAML выглядит следующим образом:
<Window.Resources>
<Style x:Key="BoundsStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
...
<TextBox/>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="Focusable" Value="False"/>
</Style>
</Window.Resources>
...
<ListBox Name="MyListBox"
ItemContainerStyle="{StaticResource BoundsStyle}"/>
Так что, когда SaveAndSubmit
называется, bounds
заканчивается тем, что я изначально установил в DVSelectionChanged
. Другими словами, список не обновляется на основе того, что пользователь вводит в текстовые поля, содержащиеся в списке. Как я могу получить обновленные ListBoxItem
? Я думаю, что моя проблема похожа на this, но на данный момент она не работает для меня.
Когда я перехожу в отладчик, я могу получить индивидуальный ListBoxItem
. Однако их содержание пуст. Я изучаю это прямо сейчас.
Трудно понять, понять - я думаю, вы должны правильно реализовать это с помощью MVVM. Привяжите к ItemsSource, привяжите DVSelection и обработайте изменения в модели представления. Не обрабатывайте обработчик ItemsSource напрямую в коде, так как вы, вероятно, ошибетесь, привяжетесь, обновите и т. Д. – NSGaga
Благодарим вас за ответ. Я попытаюсь лучше объяснить, что происходит в вопросе. Я работаю над кодом, потому что это технически небольшой диалог, который будет показан по определенной команде (из моей виртуальной машины). Я пытаюсь подготовить значения из TextBoxes для отправки. VM не заботится о том, что делает пользователь во время работы в диалоговом окне; он просто заботится о том, что ему возвращается. Поэтому я готовлю данные в коде для кода. Я свяжусь с VM после подготовки данных в 'SaveAndSubmit'. Или это то, что я планирую, по крайней мере. – Joseph