2016-05-24 6 views
0

私は、ユーザーが入力した内容に基づいてデータベースからストリートネームが入力されるリストボックスを持つオートコンプリートテキストボックスを作成しています。私のアプリが起動されると、ユーザーはまだテキストボックスに何も入力していないので、プロパティのgetterはnullを返します。私が達成しようとしているのは、通りがapi呼び出しから返された後に何とかゲッターをリフレッシュすることです。私はまた働いていないように私のセッターにOnPropertyChangedを持っています。助言がありますか?ありがとうございました。ICollectionViewプロパティでゲッターをリフレッシュすることはできますか?

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; 

} 

リストボックス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

を、私は、IEnemerableに結合することによって、これを行うと – Paparazzi

答えて

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> 
+0

私のViewModelは、バインド可能な基底クラスを介して実装INotifyPropertyChangedのいるんNotifyPropertyChanged私がする必要があるものがありますそれに追加しますか? – TanessiaG

+0

いいえ、基本クラスに実装されている場合は、それを「再実装」する必要はありません。 – Matas

関連する問題