2010-05-13 2 views
0

Допустим, у меня есть DataTemplate, как такПолучение SelectedItem из выпадающего списка в DataTemplate

<DataTemplate x:Key="Body"> 
    <StackPanel Orientation="Horizontal"> 
    <ComboBox ItemsSource="{Binding Path=Person.Children}"></ComboBox> 
    <Button Click="Button_Click">Hello</Button> 
    </StackPanel> 
</DataTemplate> 

который показывает список ComboBoxes затем с помощью кнопки.

Теперь при нажатии кнопки мне нужно найти значение в комбо рядом с нажатой кнопкой. Я могу получить контекст данных, как показано ниже, но не может работать, как получить комбо SelectedItem

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    // Can get the data context 
    var p = ((Button)sender).DataContext as Person; 

    // How to get the value in the combo ...? 
} 

ответ

0

вы также можете ссылаться на поле со списком в своем коде, если вы укажете ему имя. Однако его очиститель использовать отдельный класс для вашей логики, чем код позади. Такие, как viewmodel.

, то вы могли бы сделать что-то вроде этого ...

  <DataTemplate x:Key="Body"> 
       <StackPanel Orientation="Horizontal"> 
        <ComboBox ItemsSource="{Binding Path=Person.Children}" 
         SelectedItem="{Binding Path=SelectedChild}" 
         IsSynchronizedWithCurrentItem="True"/> 
        <Button Command="{Binding Path=ButtonCommand}">Hello</Button> 
       </StackPanel> 
      </DataTemplate> 
0

Вместо того, чтобы использовать обработчик событий Click используйте Command и привязать CommandParameter свойство к ComboBox.SelectedItem. Затем в исполняемой логике вашей команды вы можете использовать параметр.

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