1

私は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");
            }    
        }
    }            
}
4

2 に答える 2

4

It looks like your OnStartup method is instantiating a MainWindow and never showing it. You probably have the StartupUri set in XAML which is creating a different MainWindow with the data context not set.

You could remove the StartupUri and call mainWindow.Show(). Alternatively, you could get rid of the OnStartup method and set up the data context in the main window's constructor.

于 2013-09-26T13:45:48.957 に答える
0

Windowでこれを初期化する必要はありませんOnStartup

のインスタンスを作成した後のMainWindowコンストラクターで、それは機能するはずです。InitializeViewModel

于 2013-09-26T13:58:13.940 に答える