상단에 검색 창이 있고 아래 검색과 일치하는 항목 목록이있는 WP8 앱에서 검색 상자 업데이트로 업데이트하는 페이지를 개발하려고합니다. 아주 똑바로, 맞습니까? 나는 그것을 작동시킬 수 없다는 점을 제외하고는.Windows Phone CollectionView 아무것도 표시하지 않음
StackOverflow와 interweb를 살펴본 후 CollectionViewSource
을 사용하는 것이 좋습니다. 글쎄, 나는 그것을 사용하려고하고 아무 항목도 나타나지 않는다. XAML에서 내 항목이 포함 된 ObservableCollection
으로 전환하면 모든 항목이 정상적으로 표시됩니다.
내 데이터가 DB에서 비동기 적으로로드됩니다. 당신이 볼 수 있듯이
XAML
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<toolkit:PhoneTextBox Grid.Row="0" Hint="search query" ActionIcon="/Assets/Search.png" Text="{Binding SearchQuery, Mode=TwoWay}">
<i:Interaction.Behaviors>
<themes:TextBoxUpdateOnTextChangedBehavior />
</i:Interaction.Behaviors>
</toolkit:PhoneTextBox>
<phone:LongListSelector Grid.Row="1" ItemsSource="{Binding SearchResults}" />
<!-- I have also tried binding to SearchResults.View with no success -->
</Grid>
보기 모델
public class MyViewModel
{
private ObservableCollection<MyItemViewModel> _allItems = new ObservableCollection<MyItemViewModel>();
public CollectionViewSource SearchResults { get; private set; }
public MyViewModel()
{
SearchResults = new CollectionViewSource { Source = _allItems };
_allItems.CollectionChanged += (_, __) => SearchResults.View.Refresh();
LoadAllItemsAsync();
}
private async void LoadAllItemsAsync()
{
IList<MyItemModel> models = await LoadMyModels();
_allItems.AddRange(models.Select(model => new MyItemViewModel(model)));
}
}
, 나는 아직 코드를 필터링 쓰기를 시도하지 않았습니다. 위의 코드는 기본적으로 내가로드 한 모든 항목이있는 LongListSelector를 보여 주면 안됩니까? SearchResults
유형을 ObservableCollection<MyItemViewModel>
으로 변경하고 getter가 _allItems
을 반환하면 내 페이지에 예상되는 항목이 표시됩니다. 여기서 내가 뭘 잘못하고 있니?
허 또 다른 질문은 이것의 예를 (내가 생각 시도하지 않은) 제공합니다. 나는 그것에 대해 전혀 몰랐다. 그 다른 수정 중 하나를 시도하자. 또는 ItemsControl을 사용하십시오. – sohum