I need some quick help which is a road blocker for me now. I have Button
in ItemsControl
and I need to perform some task on Button click. I tried adding Command
to Button
in ItemsControl
DataTemplate
but its not working. Can anyone suggest how to proceed further.
<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>
and in ViewModel I have implemented code for Command. And its not working. Please suggest any solution for me to proceed further
The
DataContext
of each item in yourItemsControl
is the item in the collection theItemsControl
is bound to. If this item contains theCommand
, your code should work fine.However, this is not usually the case. Typically there is a ViewModel containing an
ObservableCollection
of items for theItemsContro
l, and the Command to execute. If this is your case, you'll need to change theSource
of your binding so it looks for the command inItemsControl.DataContext
, notItemsControl.Item[X]
Read this:
http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
Implement a class similar to
RelayCommand
in the above article. Would make your further MVVM coding easier. :-)If your ViewModel has a property of type
ICommand
you can bind theButton
'sCommand
property to that:XAML:
C#:
Just a guess. Is
CommandDetailsButtonClick
defined in a ViewModel, which isDataContext
of your UserControl (the one with ListStpRules property)?DataContext
of button inItemTemplate
is an item fromListStpRules
, and if you command is not there then binding won't find it.You can check diagnostic messages from wpf in Output window while debugging your application. It writes there if it can not resolve binding.