我现在需要一些快速帮助,这对我来说是一个障碍物。我在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的代码。它不起作用。请为我提出进一步的解决方案
答案 0 :(得分:17)
DataContext
中每个项目的ItemsControl
是ItemsControl
绑定的集合中的项目。如果此项目包含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的诊断消息。如果无法解析绑定,它会写入。