I am facing some problems using GalaSoft's RelayCommand.
I have a NextCommand property that works, but only several times.
Afterwards, it stops working completely.
You can try this out with the sample project:
http://s000.tinyupload.com/?file_id=65828891881629261404
The behaviour is as follows:
- NextCommand:
- pops all items until the active index
- if there are less than 50 items left, pushes 1 new item
- marks new item as active
- BackCommand:
- moves the active index back by 1 position
Steps to replicate:
- the '+' (OemPlus) key has been bound to NextCommand
- the '-' (OemMinus) key has been bound to BackCommand
- Hold the '+' key until the list stops growing (50 items limit)
- Hold the '-' key until the first item in the list is the active
- Repeat
The number of repetitions needed (to replicate the bug) is inconsistent.
Sometimes I get it after 4 repetitions; other times up till 9.
// Items Collection
public class ItemCollection : ViewModelBase
{
// List of Items
private readonly ObservableCollection<Item> _items = new ObservableCollection<Item>();
public ObservableCollection<Item> Items
{
get { return _items; }
}
// Constructor
public ItemCollection()
{
BackCommand = new RelayCommand(
() =>
{
// Go to previous page
var index = Items.IndexOf(ActiveItem);
if (index > 0)
{
ActiveItem = Items[index - 1];
}
},
() => ActiveItem != null && Items.IndexOf(ActiveItem) > 0);
}
// Back command
public RelayCommand BackCommand { get; set; }
// Next command
public RelayCommand NextCommand { get; set; }
// The currently-active item
private Item _activeItem;
public Item ActiveItem
{
get { return _activeItem; }
set
{
Set(() => ActiveItem, ref _activeItem, value);
}
}
}
// Item
public class Item : ViewModelBase
{
public string Title { get; set; }
}
When I stepped into the RelayCommand's code, the execute action's isAlive flag was false. But I can't seem to figure out how that might happen.
NextCommand
instantiated in your code. The problem could be there (something what disable it). – SurlyNextCommand
is – Dumuzi