2012-08-30 26 views
0

如何在ListView內的子控件獲得焦點時更新ListView.SelectedItem如何在ListView子控件獲得焦點時更新ListViewItem.SelectedItem?

<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> 

ListViewGridView列內的子控件的行。當任何行中的任何子控件具有鍵盤焦點時,我想更新ListView.SelectedItem的綁定屬性。如果這完全可以在.xaml文件內完成,而不必訴諸代碼隱藏,那將是非常好的。

回答

6

更改您的ListBoxSingle

如果不設置默認SelectedItem您當前的代碼工作的SelectionMode,但是如果你設置的默認SelectedItem那麼它不會自動取消選擇它,當你點擊一個第二個項目,所以SelectedItem保持綁定到默認選定項目,直到您給予該行焦點並再次將其刪除。

你也可以簡化你的XAML。你不需要在你的ListBoxItem.ResourcesDataTemplate,你可以在你的<ListBox>標籤直接設置SelectedItem

<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> 
+0

工程。謝謝瑞秋! –

相關問題