2012-05-12 8 views
2

リストビュー複数選択シナリオをAppBarと一緒に実装するための簡単な方法は何ですか?複数の項目が選択されたとき(Windowsの右クリックなど)は、Windows 8の起動画面と同じように動作します。ListViewとAppBarの協力です。シンプルな複数選択シナリオ

最初に選択したリストビューアイテムと一緒にアプリケーションバーを表示したい場合は、2番目、3番目などと開いたままにしておきたいので、アプリケーションバーのボタンアクション(コンテキストアクション実行された)または他のシステム全体のアプリケーションバークローズアクション(例えば、どこか他の場所で右クリックすると、コンテキストアクションがキャンセルされたことを意味する)。

私の現在の実装は複雑すぎます。私は何かが欠けているに違いないと信じています。標準化された方法で実装するには、基本的で共通したシナリオが可能でなければなりません。

下記の足場コード。このコードのみがアプリケーションバーに表示されていない場合は、2番目のリストビューアイテムを右クリックしてからリストビューをもう一度右クリックする必要があります(受け入れられません)。 IsStickyと組み合わせると、2番目のリストビュー項目をまったく選択できません。

<Page 
    x:Class="ListViewAndAppBar.ExamplePage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:ListViewAndAppBar" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    DataContext="{Binding ExamplePageViewModel, Source={StaticResource Locator}}"> 

    <Grid Background="Gray"> 
     <ListView 
      x:Name="ListView" 
      ItemsSource="{Binding Persons}" 
      SelectionMode="Multiple" 
      SelectionChanged="ListView_SelectionChanged"> 
     </ListView> 
    </Grid> 

    <Page.BottomAppBar> 
     <AppBar x:Name="BottomAppBar" Padding="10,0,10,0"> 
      <Button x:Name="BottomAppBarBack" Tag="Back" Style="{StaticResource BackAppBarButtonStyle}" HorizontalAlignment="Left" /> 
     </AppBar> 
    </Page.BottomAppBar> 
</Page> 

private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    this.BottomAppBar.IsOpen = true; 
    //this.BottomAppBar.IsSticky = true; 
} 

答えて

9

私自身の質問に答える。私は質問を投稿した後に解決策が見つからなかった。私は誰かが同じ初心者の間違いをした場合に備えてここに残します。

解決策は簡単ではありません。IsStickyはIsOpenの前に呼び出される必要があります。このスイッチの後は、すべて正常に動作します。

private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (this.ListBox.SelectedItems.Count > 0) 
    { 
     this.BottomAppBar.IsSticky = true; 
     this.BottomAppBar.IsOpen = true; 
    } 
    else 
    { 
     this.BottomAppBar.IsOpen = false; 
     this.BottomAppBar.IsSticky = false; 
    } 

    // Or the following if you wish... 
    // this.BottomAppBar.IsOpen = this.BottomAppBar.IsSticky = this.ListView.SelectedItems.Count > 0; 
} 
+0

ありがとうございましたJan!私はちょうどこの正確な問題を扱っていて、IsSticky = trueとIsOpen = trueの割り当ての順番を変更することで、それも私のために修正されました。 –

関連する問題