1

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

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

感谢你的帮助。

看法

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

应用程序.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");
            }    
        }
    }            
}
4

2 回答 2

4

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

您可以删除StartupUriand 调用mainWindow.Show(). 或者,您可以摆脱该OnStartup方法并在主窗口的构造函数中设置数据上下文。

于 2013-09-26T13:45:48.957 回答
0

您不需要WindowOnStartup.

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

于 2013-09-26T13:58:13.940 回答