ロブログ

Windows関連のことを中心につづっていけたらとは思っている。

Listviweへのデータの反映について【個人メモ】

ListViewへデータを共有させるとき、hubページと基本ページではBindingさせる際に挙動が違ったのでメモ。

※試行錯誤でやってたので、間違えてる可能性もあります。。

※アプリ提出前のアプリを使用しているため、規約的にOKとは限らないです。

 

 

基本ページというか、何もないページにListViweを設置してそこにList<>のデータをBindingさせる際は、

C#側で

this.ListView1.ItemsSource = List1;

 Xaml側では

 <ListView x:Name="ListView1" SelectionMode="Single"   ItemsSource="{Binding}" …>

 とすればうまく反映できました。

 

問題なのは、hubセクションを使う場合でした。

f:id:robo_robo:20140413235309p:plain

上記のアプリ(未完成・未提出・完成するかすら危うい)では、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:知ってる方がおられましたら教えてください;;