Я бы инкапсулировал все это, обычно нет смысла называть кнопку. Примерно так:
public class SomeDataModel
{
public string Content { get; set; }
public ICommand Command { get; set; }
public SomeDataModel(string content, ICommand command)
{
Content = content;
Command = command;
}
}
Затем вы можете создавать модели и помещать их в привязываемую коллекцию:
private readonly ObservableCollection<SomeDataModel> _MyData = new ObservableCollection<SomeDataModel>();
public ObservableCollection<SomeDataModel> MyData { get { return _MyData; } }
Тогда вам просто нужно добавить и удалить элементы и создать кнопки на лету:
<ItemsControl ItemsSource="{Binding MyData}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Content}" Command="{Binding Command}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Для получения дополнительной информации см. Соответствующие статьи на MSDN:
Обзор привязки данных
Обзор команд
Обзор шаблонов данных