2013-08-19 34 views
0

我有一個使用數據模板來在細胞內顯示特定的控制一個ListView:如何從具有焦點的模板元素中設置ListView選擇?

  <ListView Grid.Row="1" ItemsSource="{Binding Ratings}" SelectedItem="{Binding SelectedRating}" Margin="5" MinHeight="50" SelectionMode="Single" ScrollViewer.CanContentScroll="True" 
        local:GridViewSort.Enable="True"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="Date" local:GridViewSort.PropertyName="RatingDate"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <DatePicker SelectedDate="{Binding RatingDate}"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="Rating ID" local:GridViewSort.PropertyName="RatingID"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Text="{Binding RatingID}" Width="35" /> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="Name" local:GridViewSort.PropertyName="RatingName"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Text="{Binding RatingName}" Width="35" /> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="Age" local:GridViewSort.PropertyName="RatingAge"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <StackPanel Orientation="Horizontal"> 
            <TextBox Text="{Binding RatingAge}" Width="35" /> 
            <TextBlock Text=" yrs"/> 
           </StackPanel> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView> 
      </ListView.View> 
     </ListView> 

我也有一個刪除按鈕來刪除所選擇的行。

我的用戶習慣於點擊編輯和日期控件(不會更改所選行),然後點擊刪除來刪除他點擊的行。不幸的是,這會刪除錯誤的行。

無論用戶何時點擊控件,我如何更改行選擇?

回答

2

您可以在ListViewItem的使用PreviewMouseUp事件:

<ListView Grid.Row="1" ItemsSource="{Binding Ratings}" SelectedItem="{Binding SelectedRating}" Margin="5" MinHeight="50" SelectionMode="Single" ScrollViewer.CanContentScroll="True" 
        local:GridViewSort.Enable="True"> 
    <ListView.Resources> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <EventSetter Event="PreviewMouseUp" Handler="ListViewItem_PreviewMouseUp" /> 
     </Style> 
    </ListView.Resources> 
    <ListView.View> 
     <GridView> 
     ... 

後面的代碼:

private void ListViewItem_PreviewMouseUp(object sender, MouseButtonEventArgs e) 
{ 
    var listViewItem = sender as ListViewItem; 
    if (listViewItem != null) 
    { 
     listViewItem.IsSelected = true; 
    } 
} 
相關問題