ItemsControl按钮单击命令

时间:2012-03-15 08:26:54

标签: wpf mvvm user-controls wpf-controls itemscontrol

我现在需要一些快速帮助,这对我来说是一个障碍物。我在Button中有ItemsControl,我需要在按钮点击上执行一些任务。我尝试在Command Button中将temsControl添加到DataTemplate,但它不起作用。任何人都可以建议如何进一步。

<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>

在ViewModel中我实现了Command的代码。它不起作用。请为我提出进一步的解决方案

4 个答案:

答案 0 :(得分:17)

DataContext中每个项目的ItemsControlItemsControl绑定的集合中的项目。如果此项目包含Command,则您的代码应该可以正常运行。

然而,通常情况并非如此。通常,ViewModel包含ObservableCollection l的ItemsContro项和要执行的Command。如果是这种情况,您需要更改绑定的Source,以便在ItemsControl.DataContext中查找命令,而不是ItemsControl.Item[X]

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

答案 1 :(得分:0)

如果您的ViewModel具有ICommand类型的属性,则可以将Button的{​​{1}}属性绑定到该属性:

XAML:

Command

C#:

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

答案 2 :(得分:0)

阅读本文:

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

在上面的文章中实现类似于RelayCommand的类。将使您的MVVM编码更容易。 : - )

答案 3 :(得分:0)

只是一个猜测。 CommandDetailsButtonClick是否在ViewModel中定义,即UserControl的DataContext(具有ListStpRules属性的那个)?

DataContext中的

ItemTemplate按钮是来自ListStpRules的项目,如果您的命令不存在,则绑定将无法找到它。

在调试应用程序时,您可以在“输出”窗口中检查来自wpf的诊断消息。如果无法解析绑定,它会写入。