2017-10-28 10 views
0

問題を示すためにサンプルアプリケーションを作成しました。 モデルクラス、データモデル、残りのAPIからデータを取得するサービスファイルがあるので、ここですべてのコードを入力するのは非常に難しいです。Windows 10のアプリケーション(UWP)のリストビューにバインドできません

情報を提供するファイルがほんの少ししか含まれていません。

_placeList = await DataModel.PlaceDataSource.GetData(url);この行のPlacePage.xaml.csファイルは実際にレコードをフェッチしていますが、バインドされずにlistviewに表示されます。

ただしgridViewPlaces.ItemsSource = await DataModel.PlaceDataSource.GetData(url);が動作します。

ここにソースコードがあります。 Project Download Link

<GridView Name="gridViewPlaces" ItemsSource="{x:Bind PlaceList}" SelectionMode="Single"> 
    <GridView.ItemTemplate> 
     <DataTemplate> 
       <Grid Width="200" Height="Auto"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="*" /> 
         <RowDefinition Height="*" /> 
        </Grid.RowDefinitions> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="40" /> 
         <ColumnDefinition Width="*" /> 
        </Grid.ColumnDefinitions> 

        <TextBlock Grid.Row="0" Grid.Column="0" Text="Key" /> 
        <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Name}" /> 
        <TextBlock Grid.Row="1" Grid.Column="0" Text="Value" /> 
        <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Value}" /> 

       </Grid> 
     </DataTemplate> 
    </GridView.ItemTemplate> 
</GridView> 

PagePage.xaml.csはファイルMainPage.xamlを

<SplitView x:Name="splitView" IsPaneOpen="True" OpenPaneLength="250" Grid.Row="1" DisplayMode="Inline"> 
    <SplitView.Pane> 
     ... 
    </SplitView.Pane> 

    <SplitView.Content> 
     <Grid> 
      <Frame x:Name="rootFrame" /> 
     </Grid> 
    </SplitView.Content> 
</SplitView> 

PlacePage.xaml

private IEnumerable<Place> _placeList; 
public IEnumerable<Place> PlaceList 
{ 
    get { return _placeList; } 
} 
public event EventHandler GroupsLoaded; 

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    url = e.Parameter.ToString(); 
    LoadPlaces(); 
} 

async private void LoadPlaces() 
{ 
    _placeList = await DataModel.PlaceDataSource.GetData(url); 
    //gridViewPlaces.ItemsSource = await DataModel.PlaceDataSource.GetData(url);   // This works 
    gridViewPlaces.UpdateLayout(); 
    if (GroupsLoaded != null) 
      GroupsLoaded(this, new EventArgs()); 
} 

答えて

1

PlaceListプロパティは、バインディングに変更があることを知らせるために通知を発行する必要があります。つまり、_placeListを置き換えると、PlaceListが変更されたことを誰にも通知せず、何も更新しません。ここでの典型的なパターンは、PlaceListプロパティを読み込み専用に初期化し、コレクションをスワップアウトするのではなく、既存のコレクションに追加することです。

さらに、PlaceList内のIEnumerableは、コンテンツが変更されたときに通知を提供する必要があります。これを行う標準的な方法は、OCがINotifyPropertyChangedとINotifyCollectionChangedを実装するためObservableCollectionにすることです。 Binding to collectionsクイックスタート

+0

はいObservableCollectionに変更しようとしましたが、まだ動作しません。 MainPage.xaml.csファイルが表示されている場合は提供されているサンプルから同じコンセプトが使用され、splitviewのバインディングリストビューで動作します。 – Sharath

+0

それはちょうどその半分です。また、コレクションを変更したことを通知する必要があります。更新されたテキストを見る –

関連する問題