2012-03-15 37 views
8

Necesito ayuda rápida, que ahora es un bloqueador de carreteras. Tengo Button en ItemsControl y necesito realizar alguna tarea al hacer clic con el botón. Intenté agregar Command a Button en I temsControlDataTemplate pero no está funcionando. ¿Alguien puede sugerir cómo seguir adelante?Elementos Botón de control, haga clic en el comando

<UserControl.Resources> 
    <DataTemplate x:key="mytask"> 
     <TextBox Grid.Row="5" Grid.Column="2" Text="{Binding Path=PriorNote}" Grid.ColumnSpan="7" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,5" Width="505" Foreground="Black"/> 
     <StatusBarItem Grid.Row="2" Grid.Column="8" Margin="8,7,7,8" Grid.RowSpan="2"> 
     <Button x:Name="DetailsButton" Command="{Binding CommandDetailsButtonClick}"> 
    </DataTemplate> 
</UserControl.Resources> 

<Grid> 
    <ItemsControl Grid.Row="1" 
        ItemsSource="{Binding ListStpRules}" 
        ItemTemplate="{StaticResource myTaskTemplate}" Background="Black" 
        AlternationCount="2" > 
    </ItemsControl> 
</Grid> 

y en ViewModel Implementé el código para Command. Y no está funcionando. Para sugerir una solución para mí para seguir adelante

+0

¿Puede dar más código ??? –

Respuesta

0

Si su modelo de vista tiene una propiedad de tipo ICommand se puede obligar a la Button 's Command propiedad a que:

XAML:

<DataTemplate DataType="{x:Type my:FooViewModel}"> 
    <Button Content="Click!" Command="{Binding Path=DoBarCommand}" /> 
</DataTemplate> 

C#:

public sealed class FooViewModel 
{ 
    public ICommand DoBarCommand 
    { 
    get; 
    private set; 
    } 
    //... 
    public FooViewModel() 
    { 
    this.DoBarCommand = new DelegateCommand(this.CanDoBar, this.DoBar); 
    } 
} 
0

Solo supongo. ¿Está definido el CommandDetailsButtonClick en un ViewModel, que es DataContext de su UserControl (el que tiene la propiedad ListStpRules)?

DataContext de botón en ItemTemplate es un artículo de ListStpRules, y si el comando no está allí, el enlace no lo encontrará.

Puede verificar los mensajes de diagnóstico de wpf en la ventana de Salida mientras depura su aplicación. Escribe allí si no puede resolver el enlace.

15

El DataContext de cada elemento en su ItemsControl es el elemento de la colección al que el ItemsControl está destinado. Si este artículo contiene el Command, su código debería funcionar bien.

Sin embargo, este no suele ser el caso. Normalmente hay un ViewModel que contiene un ObservableCollection de elementos para el ItemsContro l, y el comando para ejecutar. Si este es tu caso, tendrá que cambiar el Source de su unión a lo que busca el comando en ItemsControl.DataContext, no ItemsControl.Item[X]

<Button Command="{Binding 
    RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}, 
    Path=DataContext.MyCommand}" /> 
+2

Agregando a la buena respuesta de Rachel, si quiere pasar el elemento como parámetro, use CommandParameter = "{Binding}" ... – isntn

+0

+1 ¡Esto funcionó perfectamente para mí! De hecho, necesitaba vincularme a un 'Comando' en la Vista y no en ViewModel, así que usé:' {Binding RelativeSource = {RelativeSource AncestorType = {x: Type UserControl}}, Path = MyCommand} 'instead =] – newfurniturey

Cuestiones relacionadas