我是WPF的新手,我試圖在ContentControl中動態地添加一個Button,當點擊時它應該觸發一個命令。我正在使用MVVMLight來處理命令。從ContentControl中的Button觸發命令?
下面我有兩個按鈕的例子。頂部按鈕直接放置在StackPanel中。這個按鈕如預期的那樣觸發命令。
第二個按鈕放在ContentControl中。它可以正確顯示,但是單擊按鈕時Command不會觸發。 我認爲這是因爲綁定不通過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>
這裏的視圖模型使用以下命令:
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");
}
}
綁定的代理可能會有所幫助。見http://stackoverflow.com/questions/7711275/bind-datagrid-column-visibility-mvvm – dytori