我正在开发一个自动填充文本框,其中包含一个列表框,该列表框将根据用户输入的内容从数据库中填充街道名称。当我的应用程序启动时,我的属性上的getter返回null,因为用户尚未在文本框中键入任何内容。我想要完成的是在从api呼叫返回街道后以某种方式刷新吸气剂。我的二传手中也有一个OnPropertyChanged
似乎无法正常工作。有什么建议?谢谢。
public ICollectionView Streets
{
get { return streets; }
set
{
streets = value;
OnPropertyChanged("Streets");
Streets.Refresh();
}
}
这里的街道被添加到列表中(效果非常好):
public void AddToList()
{
var streetNames = new ObservableCollection<Street>();
{
streetNames.Add(new Street() { StreetName = "Mockingbird Ln" });
streetNames.Add(new Street() { StreetName = "Shoeman Ln" });
streetNames.Add(new Street() { StreetName = "Gingerbread Drive" });
foreach (var street in StreetNames)
{
streetNames.Add(new Street() {StreetName = street});
}
};
streets = CollectionViewSource.GetDefaultView(streetNames);
streets.Filter = ContainsFilter;
}
Listbox Xaml:
<ListBox x:Name="StreetListBox" Visibility="Collapsed" Background="White" Margin="138,548,35,381"
ItemsSource="{Binding Path=Streets, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}"
SelectedItem="{Binding Path=SelectedStreet}">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type System:String}">
<StackPanel>
<TextBlock Text="{Binding Path=StreetName}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:0)
您需要在ViewModel上实现INotifyPropertyChanged
接口。如果你没有,PropertyChanged
事件不会被你的观众收听,那么它就不会打电话给你的吸气者。
我在您的代码中看到的其他问题是在XAML DataType="{x:Type System:String}"
中,这是错误的。您的数据类型为Street
,因此您的XAML应如下所示:
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type local:Street}">
<StackPanel>
<TextBlock Text="{Binding Path=StreetName}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>