私が取り組む機能は、キーワード検索のために自動補完されています。ユーザーが検索バーに何かを入力するとすぐに、ビューモデルはautocomplete apiをキーワードパラメータで呼び出して自動補完候補を取得し、observablecollectionコンテナに入れます。このobservablecollectionは依存関係のプロパティであり、リストボックスと結合してオートコンプリート候補を表示します。私の問題は、依存関係のプロパティが正しく設定されているが、リストボックスに何も表示されないということです。以下のいくつかのコードの断片です:xaml.csに結合依存関係プロパティobservablecollectionによってリストボックスが更新されない
データ:それはだ、
private void searchBar_TextChanged(object sender, TextChangedEventArgs e)
{
_searchViewModel.getTypeaheadListFromServer(searchBar.Text);
}
ビューモデルにおける依存関係プロパティ:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
searchBar.Focus();
_searchViewModel = new SearchViewModel();
DataContext = _searchViewModel;
}
オートコンプリートAPIを呼び出すためにビューモデルにメソッドを呼び出します首尾人口:XAMLでバインディング
public ObservableCollection<TypeaheadElement> TypeaheadList
{
get { return (ObservableCollection<TypeaheadElement>)GetValue(TypeaheadListProperty); }
set { SetValue(TypeaheadListProperty, value); }
}
// Using a DependencyProperty as the backing store for TypeaheadList. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TypeaheadListProperty =
DependencyProperty.Register("TypeaheadList", typeof(ObservableCollection<TypeaheadElement>), typeof(SearchViewModel), new PropertyMetadata(null));
データ:
<ListBox Name="typeahead" Grid.Row="1" ItemsSource="{Binding TypeaheadList}" Height="518" Margin="0,0,0,-518" SelectionChanged="typeahead_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock TextWrapping="Wrap" Text="{Binding TypeaheadElementStr}" FontSize="{StaticResource ListItemFontSize}" FontFamily="Segoe WP" Margin="10,0,0,0" VerticalAlignment="Top">
<TextBlock.Foreground>
<SolidColorBrush Color="{StaticResource ListItemFontColor}"/>
</TextBlock.Foreground>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
ありがとうございました!
こんにちはハリス、本当にありがとうございます。しかし、updatesourcetriggerを追加した後、そのページに移動すると次のようなエラーが表示されます。 'PropertyChanged'テキストから 'System.Windows.Data.UpdateSourceTrigger'を作成できませんでした。助言がありますか?ありがとう! –
'DependencyProperty.Register'の最後のパラメータを' new FrameworkPropertyMetadata( null、 FrameworkPropertyMetadataOptions.BindsTwoWayByDefault) 'に変更してみてください。 –
こんにちは、ハリスさん、ありがとうございます。私はFrameworkPropertyMetadataを使用しようとしましたが、 "FrameworkPropertyMetadataが名前空間System.Windowsに存在しません"という文句を言います。しかし、私はmsdn docをチェックし、FrameworkPropertyMetadataクラスはSystem.Windowsのすぐ下にあります。何が起きているのか?新しい質問をしておきながら申し訳ありません。ありがとう! –