Я новичок в WPF и пытаюсь динамически добавить кнопку внутри ContentControl, которая должна запускать команду при нажатии. Я использую MVVMLight для обработки команд.
Ниже у меня есть пример с двумя кнопками. Верхняя кнопка помещается непосредственно в StackPanel. Эта кнопка запускает команду, как и ожидалось.
Вторая кнопка размещается внутри ContentControl. Он отображается правильно, но команда не срабатывает при нажатии кнопки. Я предположил, что это связано с тем, что привязка не передается через DataTemplate, но, похоже, это работает, если я использую обычные команды вместо MVVMLight RelayCommands.
Фреймворк удалять не хочу, вот и спрашиваю, может кто знает как исправить? Спасибо
<Window x:Class="ContentControlExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:ContentControlExample.ViewModel">
<Window.DataContext>
<vm:MainViewModel />
</Window.DataContext>
<Window.Resources>
<DataTemplate x:Key="MyButton" >
<Button Content="SUBMIT" Command="{Binding MyCommand}" Width="200" Height="50"/>
</DataTemplate>
</Window.Resources>
<StackPanel>
<!--When this button is clicked, the Command executes as expected-->
<Button Content="SUBMIT" Command="{Binding MyCommand}" Width="200" Height="50"/>
<!--Nothing happens when this button is clicked-->
<ContentControl ContentTemplate="{StaticResource MyButton}"/>
</StackPanel>
</Window>
Вот ViewModel с командой:
public class MainViewModel : ViewModelBase
{
public ICommand MyCommand { get; private set; }
public MainViewModel()
{
MyCommand = new RelayCommand(MyCommand_Executed, MyCommand_CanExecute);
}
private bool MyCommand_CanExecute()
{
return true;
}
private void MyCommand_Executed()
{
MessageBox.Show("The command executed");
}
}