2012-07-23 22 views
5

Tengo un ComboBox simple que quiero activar comandos por separado cada vez que cambia el valor seleccionado. He aquí un ejemplo de mi marcado:Comandos de enlace a ComboBoxItem en WPF

<WrapPanel Grid.Row="0" Visibility="{Binding ShowToggleViewFeedViewManual}"> 
    <ComboBox Margin="3,3,0,0"> 
     <ComboBoxItem IsEnabled="{Binding CanSelectViewFeedData}" > 
      <ComboBoxItem.CommandBindings> 
       <CommandBinding Command="SelectViewFeedDataCommand" /> 
      </ComboBoxItem.CommandBindings> 
      <TextBlock Text="View Feed Data"/> 
     </ComboBoxItem> 
     <ComboBoxItem IsEnabled="{Binding CanSelectViewManualData}"> 
      <ComboBoxItem.CommandBindings> 
       <CommandBinding Command="SelectManualFeedDataCommand" /> 
      </ComboBoxItem.CommandBindings> 
      <TextBlock Text="View Manual Data"/> 
     </ComboBoxItem> 
    </ComboBox> 
</WrapPanel> 

me sale un error que dice "No se puede convertir 'SelectViewFeedDataCommand'". Obtengo un error similar para el otro ComboBoxItem también. ICommand se define en la Clase ViewModel que es DataSource para UserControl, enlazado como DataTemplate.

public ICommand SelectViewFeedDataCommand 
{ 
    get 
    { 
     // Code to perform 
    } 
} 

He investigado extensamente esta bonita pero no han encontrado una respuesta para cómo unirse de manera eficaz la ICommand a la ComboBoxItem.

Estoy adaptando esto del código existente que usaba un conjunto de botones de radio y comandos asociados, lo cual se hace bastante fácil. ¿No hay una forma simple de hacer esto con un ComboBox?

Gracias.

+1

¿Qué hay de unión a la propiedad 'ComboBox.SelectedItem' a algo, a continuación, hacer su lógica de mando en el evento' PropertyChanged' de su propiedad SelectedComboBoxItem? – Rachel

Respuesta

0

estaba mirando mis viejos mensajes y me di cuenta de que nunca había publicado la solución a mi pregunta ... realmente muy simple (si no elegante). Acabo de crear una lista en mi modelo de vista que contenía mis "opciones" cuadro combinado y luego, cuando el SelectedValue fue cambiado, provocada mi lógica "cambiado" en el definidor de la propiedad:

<WrapPanel Grid.Row="0" Visibility="{Binding ShowToggleFeedViewManual}" > 
    <ComboBox Margin="10,10,10,10" Width="200" ItemsSource="{Binding AvailableDataSources}" SelectedValue="{Binding SelectedDataSource}"/> 
</WrapPanel> 

Y desde el punto de vista-modelo :

public FeedSource SelectedDataSource 
    { 
     get { return _selectedDataSource; } 
     set 
     { 
      _selectedDataSource = value; 
      base.OnPropertyChanged("SelectedDataSource"); 

      //additional code to perform here 

     } 
    } 
0

¿Has intentado poner el comando en una encuadernación?

<CommandBinding Command="{Binding SelectManualFeedDataCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" /> 

Editar para la estrategia de actualización:

Dado que el elemento ComboBox no admite la unión mando directo, intente crear una propiedad adjunta:

Link

+0

Sí, tengo. Aparece un mensaje de error: "No se puede establecer un 'Encuadernación' en la propiedad 'Mandato' de tipo 'Encuadernación por comando'. Un 'Encuadernación' solo se puede establecer en una Propiedad de dependencia de un ObjetoDependency." – jpaull

Cuestiones relacionadas