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 addin
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 the Button
's Command
property to that:
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);
}
}
Just a guess. Is CommandDetailsButtonClick
defined in a ViewModel, which is DataContext
of your UserControl (the one with ListStpRules property)?
DataContext
of button in ItemTemplate
is an item from ListStpRules
, 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.
The DataContext
of each item in your ItemsControl
is the item in the collection the ItemsControl
is bound to. If this item contains the Command
, your code should work fine.
However, this is not usually the case. Typically there is a ViewModel containing an ObservableCollection
of items for the ItemsContro
l, and the Command to execute. If this is your case, you'll need to change the Source
of your binding so it looks for the command in ItemsControl.DataContext
, not ItemsControl.Item[X]
<Button Command="{Binding
RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}},
Path=DataContext.MyCommand}" />