2010-12-08 21 views
5

Tengo una colección de objetos y un comando en mi ViewModel.Enlace para ver la propiedad del modelo desde ItemsControl.ItemTemplate

Quiero mostrar un hipervínculo para cada uno de los objetos de la colección, y establecer el Comando de cada hipervínculo a la misma orden, que pasa en el IDobjeto como el CommandParemeter. p.ej.

// View Model 
public class MyViewModel : ViewModelBase 
{ 
    // Raises PropertyChanged event, ommited here 
    public List<MyClass> MyList {....} 

    public RelayCommand<int> MyCommand {....} 
} 

Configuré el DataContext de mi UserControl en la clase anterior de ViewModel. El XAML para este control de usuario es el siguiente:

<UserControl> 
    <ItemsControl ItemsSource="{Binding Path=MyList}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
     <StackPanel /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
     <HyperlinkButton Content="{Binding Path=Description}" Command="{Binding Path=MyCommand}" CommandParameter="{Binding Path=MyClassID}"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</UserControl> 

la descripción del contenido de hipervínculo se muestra correctamente, pero el comando nunca se dispara, supongo que esto es porque es la búsqueda de un comando dentro del objeto MiClase?

¿Cómo puedo enlazar a UserControls DataContext.MyCommand en lugar de a MyClass.MyCommand que está buscando?

Respuesta

6

Desafortunadamente, no tenemos el modo FindAncestor en la extensión de marcado RelativeSource que WPF tiene, por lo que no puede usar eso (esto se agregará en Silverlight 5). Es desagradable, pero puede darle un nombre al elemento UserControl y usar el enlace ElementName para enlazar al comando en el objeto asignado a su DataContext.

Por ejemplo:

<UserControl Name="root"> 

se unen entonces el comando (usando la notación de puntos de la DataContext del control de usuario):

Command="{Binding Path=DataContext.MyCommand, ElementName=root}" 

Inténtelo.

+0

Chris Tengo el mismo problema que Fermin. Estoy usando SL 5, el enlace RelativeSource no funciona, ni tu respuesta. Por cierto, no veo cómo podría funcionar su respuesta, ya que DataContext no tiene una propiedad llamada MyCommand. En mi View, es decir, tengo una propiedad llamada ViewModel en el getter, hago esto: return (MyViewModel) DataContext. Todavía no funciona. – Sam

+0

Hola Sam, MyCommand se relaciona con el ejemplo que proporcionó Fermin: un comando en su modelo de vista. Lamentablemente, no tengo suficientes detalles de tu problema para ayudarte. Sería mejor que comenzaras una nueva pregunta, con detalles de qué estás tratando de hacer exactamente y cómo estás tratando de hacerlo. –

Cuestiones relacionadas