将组合框绑定到列表<;字符串>;在wpf中
本文关键字:gt 字符串 wpf 组合 lt 绑定 列表 | 更新日期: 2023-09-27 18:23:34
这是一个silverlight应用程序。
我正在尝试将组合框绑定到字符串列表。它将显示我在加载应用程序之前存储在列表中的值,但我也有它,这样用户就可以向列表中添加字符串,这些更改不会反映在组合框中。我已经确认了列表的更新是正确的,只是没有组合框。
按照下面代码目前的方式,当我在运行时更新列表,然后单击组合框下拉菜单时,整个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里有什么不对的地方吗?我在MainViewModel和Speaker Model类中实现了INotifyPropertyChanged,并且在vocab更新时发送通知。我不知道如何解决这个问题。
提前感谢您的帮助。
为了在集合更改时获得更新,该集合需要实现INotifyCollectionChanged
。List<T>
没有实现这一点,但ObservableCollection<T>
实现了,并且与List
一样工作。
因此,请尝试将您的类型从List<string>
更改为ObservableCollection<string>
。