2017-06-24 24 views
0

私はListViewを持っています。私はCollectionViewSourceを使用してグループ化していますが、選択した項目をViewModelに戻すようです。ユーザーが選択したアイテムを取得するには何が必要ですか? SelectedItem = "{SelectedComparatorGroupItemをバインドする"}は、collectionviewSourceを使用していると動作していないようですが、IsSynchronizedWithCurrentItem = "True"を試しましたが、役に立たなかった。WPF ListViewとViewViewSourceがViewModelでSelectedItemを取得しない

   <Grid> 
        <Grid.Resources> 
         <CollectionViewSource x:Key="NumberGroups" 
               Source="{Binding Path=ComparatorGroupItemList}"> 
          <CollectionViewSource.GroupDescriptions> 
           <PropertyGroupDescription PropertyName="Group" /> 
          </CollectionViewSource.GroupDescriptions> 
         </CollectionViewSource> 
        </Grid.Resources> 
        <ListView x:Name="lvNumbers" 
           DataContext="{StaticResource NumberGroups}" 
           ItemsSource="{Binding IsAsync=True}" 
           IsSynchronizedWithCurrentItem="True" 
           SelectedItem="{Binding SelectedComparatorGroupItem}" 
           VirtualizingPanel.IsContainerVirtualizable="True" 
           VirtualizingPanel.IsVirtualizing="True" 
           VirtualizingPanel.IsVirtualizingWhenGrouping="True">            
              
         <ListView.View> 
          <GridView> 
           <GridViewColumn Header="Number" DisplayMemberBinding="{Binding Number}"/> 
           <GridViewColumn Header="# Found" DisplayMemberBinding="{Binding NumberFound}"/> 
          </GridView> 
         </ListView.View> 
         <ListView.GroupStyle> 
          <GroupStyle> 
           <GroupStyle.ContainerStyle> 
            <Style TargetType="{x:Type GroupItem}"> 
             <Setter Property="Template"> 
              <Setter.Value> 
               <ControlTemplate> 
                <Expander IsExpanded="False"> 
                 <Expander.Header> 
                  <StackPanel Orientation="Horizontal"> 
                   <TextBlock Text="{Binding Name}" 
                      Margin="3" 
                      FontSize="18" FontWeight="Bold" 
                      /> 
                   <TextBlock Text="{Binding ItemCount}" 
                      Margin="3" 
                      FontSize="18" FontWeight="Bold" 
                      /> 
                  </StackPanel> 
                 </Expander.Header> 
                 <ItemsPresenter/> 
                </Expander> 
               </ControlTemplate> 
              </Setter.Value> 
             </Setter> 
            </Style> 
           </GroupStyle.ContainerStyle> 
          </GroupStyle> 
         </ListView.GroupStyle> 
        </ListView> 
       </Grid> 
+0

「SelectedComparatorGroupItem」とは –

答えて

2

あなたの地元のCollectionViewSourceListViewDataContextを設定します。つまり、SelectedItemからSelectedComparatorGroupItemにバインドすると、SelectedComparatorGroupItemプロパティはCollectionViewSourceではなく viewmodelで検索されます。そこから出力ウィンドウに何らかの種類のバインディングエラーがあるはずです。

DataContextを設定しないでください。ただ自然に流れ込ませてください。あなたがする必要があるのは、ItemsSourceCollectionViewSourceにバインドすることだけです。

私は、これはそれを行いますと思いが、私はVSが開いたり、あなたのViewModelへのアクセスを持っていない、確認します

<ListView x:Name="lvNumbers" 
    ItemsSource="{Binding Source={StaticResource NumberGroups}, IsAsync=True}" 
    IsSynchronizedWithCurrentItem="True" 
    SelectedItem="{Binding SelectedComparatorGroupItem}" 
    VirtualizingPanel.IsContainerVirtualizable="True" 
    VirtualizingPanel.IsVirtualizing="True" 
    VirtualizingPanel.IsVirtualizingWhenGrouping="True"> 

を一般的なルールとして、あなたが今までDataContextを設定している場合何かの、あなたはWPFがあなたがそれをやりたがっている方法をやっていません。通常、私がそれを設定する唯一の場所は、私がUserControlで怠け者になったときです。

+0

ありがとう、私はビルド中のプラグをテストするために一緒にこれを投げていた。コードブラインドを手に入れました! – John

関連する問題