【问题标题】:Simple WPF MVVM Commanding Issue - What's Wrong With This Code?简单的 WPF MVVM 命令问题 - 此代码有什么问题?
【发布时间】:2011-02-19 19:58:43
【问题描述】:

我正在尝试使用 MVVM 在我的 UI 中的按钮上设置命令。但是,当我单击按钮时,该命令不会执行。该代码基于Jason Dolinger's example(第 3 段中的链接)。

看起来应该很简单,所以我确定一旦发现问题我会觉得很傻。

随后是相关代码位。命令如下(很简单):

public class NavigateCommand : ICommand
{
    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

    public void Execute(object parameter)
    {
        MessageBox.Show("Executed.");
    }
}

XAML 看起来像:

<Button x:Name="btn_ProjectManager" Command="{Binding Navigate}" Content="Test Button">

ViewModel 看起来像:

public class HomeScreenViewModel : DependencyObject
{
    public ICommand Navigate;

    public HomeScreenViewModel()
    {
        this.Navigate = new NavigateCommand();
    }
}

【问题讨论】:

  • 如何设置视图的数据上下文?
  • 另外,为什么你的视图模型是从 DependencyObject 派生的?

标签: wpf mvvm command icommand


【解决方案1】:

Navigate 应该是一个属性。绑定仅适用于属性

【讨论】:

  • 并确保它不是自动属性,我遇到了这些问题。
  • 我真的不确定,这可能是一个错误,在 Silverlight 中发生在我身上。自动属性不起作用,当我将其设为完整属性时,它起作用了。
  • @Snowbear,我尝试将“public ICommand Navigate”更改为“public ICommand Navigate { get; set; }”,但它并没有改变任何行为。 :( 不过感谢您的帮助!
  • @Anthony,那么您的 ViewModel-DataContext 设置可能有问题。看看 VS 输出窗口 - 那里可能有绑定错误。
  • @Notter:将其更改为由私有字段支持的公共属性也没有让我有任何收获。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多