Listviweへのデータの反映について【個人メモ】
ListViewへデータを共有させるとき、hubページと基本ページではBindingさせる際に挙動が違ったのでメモ。
※試行錯誤でやってたので、間違えてる可能性もあります。。
※アプリ提出前のアプリを使用しているため、規約的にOKとは限らないです。
基本ページというか、何もないページにListViweを設置してそこにList<>のデータをBindingさせる際は、
C#側で
this.ListView1.ItemsSource = List1;
Xaml側では
<ListView x:Name="ListView1" SelectionMode="Single" ItemsSource="{Binding}" …>
とすればうまく反映できました。
問題なのは、hubセクションを使う場合でした。
上記のアプリ(未完成・未提出・完成するかすら危うい)では、hubセクション内でListViewのデータが反映されるようにしたものです。
<DataTemplate>を使用しているためなのか*1、this.ListView1.ItemsSource = List1;のように直接しようとすると、ListView1が見つからず(?)にエラーが出てしまうだけです。
そこで、Windows SDKなどを参考に調べた結果、次のようなやり方が見つかりました。
まず、historiesというList<>型のデータがあるとして、C#側で
cvs1.Source = histories;
とする
次にXaml側でPage.Resources内に次のように
<Page.Resources>
...
<CollectionViewSource x:Name="cvs1" />
...
</Page.Resources>
と定義させます。そして、ListView内で
<ListView x:Name="ListView1" SelectionMode="None" ItemsSource="{Binding Source={StaticResource cvs1}}" …>
太字のようにBindingさせることで、反映されるようになりました。
*1:知ってる方がおられましたら教えてください;;