2014-09-18 4 views
1

Это приложение silverlight.Связывание со списком со списком <string> в wpf

Я пытаюсь связать combobox со списком строк. Он будет отображать значения, которые я сохранил в списке, прежде чем загружать приложение, но у меня также есть его, чтобы пользователь мог добавлять строки в список, и эти изменения не отражаются в выпадающем списке. Я подтвердил, что список обновляется правильно, а не combobox.

Способ, которым приведенный ниже код в настоящее время, когда я обновляю список во время выполнения, затем выберите раскрывающийся список combobox, исчезнет все приложение silverlight. Он не вызывает ошибок, которые я могу видеть в VS, отладочном выходе или в браузере, окно браузера, содержащее приложение silverlight, просто исчезает.

<UserControl x:Class="SilverlightSpeak.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:local="clr-namespace:SilverlightSpeak.ViewModels" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 

    <UserControl.Resources> 
     <local:MainViewModel x:Key="MainViewModel"/> 
    </UserControl.Resources> 

    <Grid x:Name="LayoutRoot" Background="White" HorizontalAlignment="Center" VerticalAlignment="Top" DataContext="{StaticResource MainViewModel}"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="23*"/> 
      <RowDefinition Height="21*"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="193*"/> 
      <ColumnDefinition Width="60*"/> 
     </Grid.ColumnDefinitions> 
     <Button Content="Add" Command="{Binding AddWordCommand}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Grid.Column="1"/> 
     <TextBox Text="{Binding ModelSpeaker.newWord, Mode=TwoWay}" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/> 
     <ComboBox ItemsSource="{Binding ModelSpeaker.vocab, Mode=TwoWay}" SelectedIndex="{Binding ModelSpeaker.nextWordToSpeak, Mode=TwoWay}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="120" Grid.Row="1"/> 
     <Button Content="Speak" Command="{Binding SpeakWordCommand}" CommandParameter="{Binding ModelSpeaker.nextWordToSpeak}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Grid.Row="1" Grid.Column="1" Grid.RowSpan="2"/> 

    </Grid> 
</UserControl> 

Есть ли что-то, что я делаю неправильно в своем xaml здесь? У меня есть INotifyPropertyChanged, реализованный в моем классе MainViewModel и Speaker Model, и уведомления отправляются при обновлении vocab. Я не понимаю, как это исправить.

Заранее благодарим за любую помощь.

+0

Вместо 'List ', используйте 'ObservableCollection '. Это реализует 'INotifyCollectionChanged', который требуется для этого. – Steve

ответ

2

Чтобы получать обновления при сборе коллекции, коллекции необходимо реализовать INotifyCollectionChanged. List<T> не реализует это, но ObservableCollection<T> делает, и работает так же, как List.

Итак, попробуйте изменить тип от List<string> до ObservableCollection<string>.

+0

Спасибо, такое простое решение, что я потратил слишком много времени. – dethndestructn

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