0

取得フォーカスListView.SelectedItem内の子コントロールを更新する方法は?ListView

<ListView ItemsSource="{Binding Path=Records, Mode=TwoWay}" IsSynchronizedWithCurrentItem="True">
     <ListView.SelectedItem>
          <Binding Path="SelectedRecord" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/>
     </ListView.SelectedItem>
     <ListView.ItemContainerStyle>
          <Style TargetType="{x:Type ListViewItem}">
               <Style.Triggers>
                   <Trigger Property="IsKeyboardFocusWithin" Value="True">
                         <Setter Property="IsSelected" Value="True"/>
                   </Trigger>
               </Style.Triggers>
          </Style>
     </ListView.ItemContainerStyle>
     <ListView.Resources>
          <DataTemplate DataType="x:Type ListViewItem">
               <ListViewItem IsSelected="{Binding IsKeyboardFocusWithin"/>
          </DataTemplate>
     </ListView.Resources>
     <ListView.View>
          <GridView>
              <GridViewColumn>
              <TextBox ... Tag="{Binding}".../>
              </GridViewColumn>
              <GridViewColumn>
              <TextBox ... Tag="{Binding}".../>
              </GridViewColumn>
          </GridView>
     </ListView.View>
</ListView>

ListViewには、列内に子コントロールの行がありますGridViewListView.SelectedItem任意の行の子コントロールのいずれかにキーボード フォーカスがあるときに、バインドされたプロパティを更新したいと考えています。.xamlコード ビハインドに頼ることなく、ファイル内でこれを完全に実行できれば素晴らしいことです。

4

1 に答える 1

6

あなたのSelectionModeをに変更しListBoxますSingle

デフォルトを設定しない場合、現在のコードは機能しますがSelectedItem、デフォルトを設定するSelectedItemと、2 番目の項目をクリックしたときに自動的に選択解除されないため、SelectedItemその行にフォーカスを与えるまで、デフォルトで選択された項目にバインドされたままになります。もう一度削除します。

XAML を少し単純化することもできます。は不要で、タグに直接設定できDataTemplateますListBoxItem.ResourcesSelectedItem<ListBox>

<ListView ItemsSource="{Binding Path=Records}" IsSynchronizedWithCurrentItem="True"
          SelectedItem="{Binding SelectedRecord}" SelectionMode="Single">

     <ListView.ItemContainerStyle>
          <Style TargetType="{x:Type ListViewItem}">
               <Style.Triggers>
                   <Trigger Property="IsKeyboardFocusWithin" Value="True">
                         <Setter Property="IsSelected" Value="True"/>
                   </Trigger>
               </Style.Triggers>
          </Style>
     </ListView.ItemContainerStyle>

     <ListView.View>
          <GridView>
              <GridViewColumn>
              <TextBox ... Tag="{Binding}".../>
              </GridViewColumn>
              <GridViewColumn>
              <TextBox ... Tag="{Binding}".../>
              </GridViewColumn>
          </GridView>
     </ListView.View>
</ListView>
于 2012-08-30T12:58:45.407 に答える