2013-04-24 3 views
0

У меня есть 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. Однако их содержание пуст. Я изучаю это прямо сейчас.

+0

Трудно понять, понять - я думаю, вы должны правильно реализовать это с помощью MVVM. Привяжите к ItemsSource, привяжите DVSelection и обработайте изменения в модели представления. Не обрабатывайте обработчик ItemsSource напрямую в коде, так как вы, вероятно, ошибетесь, привяжетесь, обновите и т. Д. – NSGaga

+0

Благодарим вас за ответ. Я попытаюсь лучше объяснить, что происходит в вопросе. Я работаю над кодом, потому что это технически небольшой диалог, который будет показан по определенной команде (из моей виртуальной машины). Я пытаюсь подготовить значения из TextBoxes для отправки. VM не заботится о том, что делает пользователь во время работы в диалоговом окне; он просто заботится о том, что ему возвращается. Поэтому я готовлю данные в коде для кода. Я свяжусь с VM после подготовки данных в 'SaveAndSubmit'. Или это то, что я планирую, по крайней мере. – Joseph

ответ

0

Вам необходимо связать содержимое текстового поля.

<TextBox/> необходимость изменения в <TextBox Content="{Binding}"/>

Но следовать MVVM иначе это будет трудно найти эти ошибки.

+0

У TextBox нет Контента, поэтому я использовал свойство Text. К чему я привязан? Когда я просто использовал '' {Binding} "', я получил сообщение об ошибке двусторонней привязки, требующей Path. – Joseph

+0

{Binding} означает привязку к самому объекту. Поскольку ваш наблюдаемый сборник имеет строку, поэтому нет свойства строки, которую мы хотим связать. Нам нужно привязать к самой строке. Правильное свойство «Текст». Вероятно, двухсторонняя привязка требует свойства. Поэтому вам нужно создать объект, а не строку, и привязать текстовое поле к свойству. –

+0

Это сделало. Спасибо за ответ. Я собираюсь работать с ним немного больше. Я все еще не убежден, что MVVM решила бы/избегала этой конкретной проблемы. – Joseph