2015-07-22 4 views
0

У меня есть следующие listview:WPF набор выбранный элемент в ListView, когда выпадающий выбран

<ListView Grid.Row="1" ItemsSource="{Binding Transducers}" SelectedItem="{Binding SelectedTransducer}"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="ID" DisplayMemberBinding="{Binding LabID}"/> 
      <GridViewColumn Header="Manufacturer" DisplayMemberBinding="{Binding Manufacturer}"/> 
      <GridViewColumn Header="Channel"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox ItemsSource="{Binding DataContext.Channels, ElementName=mainInterface}" 
            SelectedItem="{Binding Channel, Mode=TwoWay}" 
            SelectedValue="{Binding Channel.ID}" 
            SelectedValuePath="ID"/> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

Он имеет несколько текстовых элементов и выпадающий. После того как я изменил значение combobox, я хочу сделать что-то для выбранного элемента, который должен быть элементом, с которым только что взаимодействует combobox. Однако, когда я взаимодействую с combobox на элементе и ничего больше с элементом, он не становится выбранным. Как установить выбранный элемент, когда я взаимодействую с выпадающим списком этого элемента?

+0

Что вы описываете по умолчанию для элемента управления DataGrid для wpf. Этот контроль также лучше подходит для редактирования. – SnowballTwo

ответ

0

решение Филиппо был близок, но не работает в моей дело. Я закончил с использованием функции TryFindParent<T>() он отметил, но мой код выглядит следующим образом:

private void ComboBox_DropDownClosed(object sender, System.EventArgs e) 
{ 
    listView.SelectedItem = null; 
    var newSelectedItem = (sender as ComboBox).TryFindParent<ListViewItem>();   
    newSelectedItem.IsSelected = true; 
} 

где listView это имя моей ListView.

0

попробовать что-то вроде этого:

(sender as ComboBox).TryFindParent<ListView>().SelectedItem = (sender as ComboBox).TryFindParent<ListViewItem>(); 

на вашем dropDownClosed случае

TryFindParent<T>() функция помощника здесь: http://www.hardcodet.net/2008/02/find-wpf-parent

/// <summary> 
/// Finds a parent of a given item on the visual tree. 
/// </summary> 
/// <typeparam name="T">The type of the queried item.</typeparam> 
/// <param name="child">A direct or indirect child of the 
/// queried item.</param> 
/// <returns>The first parent item that matches the submitted 
/// type parameter. If not matching item can be found, a null 
/// reference is being returned.</returns> 
public static T TryFindParent<T>(this DependencyObject child) 
    where T : DependencyObject 
{ 
    //get parent item 
    DependencyObject parentObject = GetParentObject(child); 

    //we've reached the end of the tree 
    if (parentObject == null) return null; 

    //check if the parent matches the type we're looking for 
    T parent = parentObject as T; 
    if (parent != null) 
    { 
    return parent; 
    } 
    else 
    { 
    //use recursion to proceed with next level 
    return TryFindParent<T>(parentObject); 
    } 
} 

/// <summary> 
/// This method is an alternative to WPF's 
/// <see cref="VisualTreeHelper.GetParent"/> method, which also 
/// supports content elements. Keep in mind that for content element, 
/// this method falls back to the logical tree of the element! 
/// </summary> 
/// <param name="child">The item to be processed.</param> 
/// <returns>The submitted item's parent, if available. Otherwise 
/// null.</returns> 
public static DependencyObject GetParentObject(this DependencyObject child) 
{ 
    if (child == null) return null; 

    //handle content elements separately 
    ContentElement contentElement = child as ContentElement; 
    if (contentElement != null) 
    { 
    DependencyObject parent = ContentOperations.GetParent(contentElement); 
    if (parent != null) return parent; 

    FrameworkContentElement fce = contentElement as FrameworkContentElement; 
    return fce != null ? fce.Parent : null; 
    } 

    //also try searching for parent in framework elements (such as DockPanel, etc) 
    FrameworkElement frameworkElement = child as FrameworkElement; 
    if (frameworkElement != null) 
    { 
    DependencyObject parent = frameworkElement.Parent; 
    if (parent != null) return parent; 
    } 

    //if it's not a ContentElement/FrameworkElement, rely on VisualTreeHelper 
    return VisualTreeHelper.GetParent(child); 
} 
+0

Что такое 'TryFindParent'? Является ли это внешней функцией, которую мне нужно получить откуда-то? – Batman

Смежные вопросы