2017-01-23 8 views
1

私はテキストブロックと別のリストを含むリストビューを持っています。 ユーザーがネストされたリストビュー項目をクリックして、親リストビューアイテムも選択されたい場合。 例: enter image description herewpf - onネストされたリストビューからアイテムを選択する親リストビューを選択する

上記の画像Lista2(親リスト項目)が選択されています。 ユーザーがLista1からLinia6をクリックして選択します。 Lista1(ネストされたリスト項目)のLinia6が選択されると、Lista1(親リスト項目)も選択されます。

また、それは背後にあるコードでこれを行うことが可能であるならば、

私のコードをXAMLない

<ListView ItemsSource="{Binding listsToDisplay}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled" Width="200"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <StackPanel> 
         <TextBlock Width="250" Text="{Binding listName}"></TextBlock> 
         <ListView ItemsSource="{Binding listContent}"> 
         </ListView> 
        </StackPanel> 

       </DataTemplate> 
      </ListView.ItemTemplate> 
+0

あなたは所望の選択行動に関するいくつかの詳細を記述することはできますか?あなたの写真から、 'Lista1.Linia6'が最後に選択されたように見えますが、あなたは' Lista2'も選択しなければならないと書いています。 – grek40

+0

投稿を編集してこの情報を追加しました:上記の画像Lista2(親リスト項目)が選択されています。ユーザーはLista1からLinia6をクリックして選択します。 Lista1(ネストされたリスト項目)のLinia6が選択されると、Lista1(親リスト項目)も選択されます。 –

+0

「Lista2.Linia4」は選択解除する必要があります(基本的に、すべてのネストされたリスト全体で1つの選択肢しか持たない)? – grek40

答えて

1

ネストされたListViewSelectedItemプロパティは、他の手段によって使用されていない場合、あなたはそれをバインドすることができますコンバータを使用してその親のListViewItem.IsSelectedに転送します。親リストビューのSelectionMode="Single"は、コンバータによる二重選択を避けるために重要です。

<Grid x:Name="grid1"> 
    <Grid.Resources> 
     <local:SelectedItemTransferConverter x:Key="ItemSelectedConverter"/> 
    </Grid.Resources> 
    <ListView ItemsSource="{Binding listsToDisplay}" SelectionMode="Single"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <TextBlock Text="{Binding listName}"/> 
        <ListView 
         ItemsSource="{Binding listContent}" 
         SelectedItem="{Binding IsSelected,RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}},Converter={StaticResource ItemSelectedConverter}}"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
</Grid> 

コンバータコード:

public class SelectedItemTransferConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is bool || value is bool?) 
     { 
      if ((bool?)value == false) 
      { 
       return null; 
      } 
     } 
     return Binding.DoNothing; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (targetType == typeof(bool) || targetType == typeof(bool?)) 
     { 
      return value != null; 
     } 
     return Binding.DoNothing; 
    } 
} 
関連する問題