【问题标题】:ICommand with MVVM in WPFWPF 中带有 MVVM 的 ICommand
【发布时间】:2013-10-02 12:33:49
【问题描述】:

我是 MVVM 和 WPF 的新手,尝试在 WPF 和 MVVM 中使用 ICommand。下面是代码。

有人可以帮忙知道为什么下面的代码不起作用,这意味着单击按钮时没有任何反应。

感谢您的帮助。

查看

<Grid>
    <Button  Height="40" Width="200" Name="button1" Command="{Binding Path=Click}">Click Me</Button>
</Grid>

App.xaml.cs

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        MainWindow mainWindow = new MainWindow();
        MainWindowViewModel vm = new MainWindowViewModel();
        mainWindow.DataContext = vm;
    }            
}

MainWindowViewModel.cs

namespace TestWPFApplication.ViewModel
{
    public class MainWindowViewModel 
    {
        private ICommand _click;

        public ICommand Click
        {
            get
            {
                if (_click == null)
                {
                    _click = new CommandTest();
                }
                return _click;
            }
            set 
            {
                _click = value;
            }
        }

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

            public event EventHandler CanExecuteChanged;

            public void Execute(object parameter)
            {
                MessageBox.Show("Hi! Test");
            }    
        }
    }            
}

【问题讨论】:

标签: wpf mvvm


【解决方案1】:

看起来您的 OnStartup 方法正在实例化 MainWindow 并且从未显示它。您可能在 XAML 中设置了 StartupUri,它正在创建一个不同的 MainWindow,但未设置数据上下文。

您可以删除StartupUri 并致电mainWindow.Show()。或者,您可以去掉 OnStartup 方法并在主窗口的构造函数中设置数据上下文。

【讨论】:

    【解决方案2】:

    您不需要在OnStartup 中初始化这个Window

    Initialize 之后的MainWindow 构造函数中创建ViewModel 的实例,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 2019-03-04
      • 2018-05-16
      • 1970-01-01
      • 2010-11-30
      相关资源
      最近更新 更多