2012-09-14 118 views
36

我有一個視圖AttributeView包含各種屬性。還有一個按鈕,按下時,它應該將默認值設置爲屬性。我也有一個ViewModelBase類,它是我擁有的所有ViewModel的基類。 問題是我似乎無法獲得綁定到WPF命令的按鈕。如何將WPF按鈕綁定到ViewModelBase中的命令?

我已經試過這一點,但它只是沒有做任何事情:

<Button Command="{Binding DataInitialization}" Content="{x:Static localProperties:Resources.BtnReinitializeData}"></Button> 

命令定義(在ViewModelBase)是這樣的:

public CommandBase DataInitialization { get; protected set; } 

,並在應用程序啓動一個爲該命令創建新實例:

DataInitialization = new DataInitializationCommand() 

但是,WPF綁定似乎沒有「找到」t他命令(按下按鈕什麼都不做)。當前視圖中使用的ViewModel來自ViewModelBase。還有什麼我可以嘗試的(我對WPF很陌生,所以這可能是一個非常簡單的問題)?

+0

CommandBase是否繼承自ICommand?按鈕DataContext是否包含DataInitialization命令?輸出面板中是否有關於綁定的消息? –

+0

是的,它繼承了ICommand。如何檢查按鈕的DataContext?我不確定輸出中的消息(應該是否有默認值?)。 –

+0

如果您顯示更多關於視圖模型和xaml的代碼會更容易 –

回答

88
<Grid > 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Button Command="{Binding ClickCommand}" Width="100" Height="100" Content="wefwfwef"/> 
</Grid> 

後面的代碼窗口:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = new ViewModelBase(); 
    } 
} 

和視圖模型:

public class ViewModelBase 
{ 
    public ViewModelBase() 
    { 
     _canExecute = true; 
    } 
    private ICommand _clickCommand; 
    public ICommand ClickCommand 
    { 
     get 
     { 
      return _clickCommand ?? (_clickCommand = new CommandHandler(() => MyAction(), _canExecute)); 
     } 
    } 
    private bool _canExecute; 
    public void MyAction() 
    { 

    } 
} 
public class CommandHandler : ICommand 
{ 
    private Action _action; 
    private bool _canExecute; 
    public CommandHandler(Action action, bool canExecute) 
    { 
     _action = action; 
     _canExecute = canExecute; 
    } 

    public bool CanExecute(object parameter) 
    { 
     return _canExecute; 
    } 

    public event EventHandler CanExecuteChanged; 

    public void Execute(object parameter) 
    { 
     _action(); 
    } 
} 

我希望這會給你的想法。

+0

這給了我一個線索在哪裏搜索。事實證明,該命令已初始化在多個地方,其中一個地方(正確的)已被評論:)謝謝! –

+0

@kor_:這就是爲什麼我們要求更多代碼 –

+6

是的,這是我在很多查找後發現的最好解釋。謝謝@Ethicallogics –

相關問題