从视图调用视图模型方法(xaml.cs)

时间:2015-09-09 05:05:56

标签: c# wpf mvvm

我有一个关于从视图(xaml.cs)调用视图模型方法的问题。任何建议将不胜感激。

该方法适用于视图模型,因为如果我在视图模型构造函数中调用该方法,我将能够在DataGrid中查看数据。但是当我在视图中调用该方法(xaml.cs)时,DataGrid为空。

在视图部分中,我有以下代码片段:(xaml.cs part)

        public bool AddSpeaker(Entities.Speaker speaker, string[] selectedCertifications)
    {
        if (selectedCertifications != null)
        {
            SpeakerCertification speakerCertification = new SpeakerCertification();
            speaker.Certifications = new List<SpeakerCertification>();
            foreach (var certificate in selectedCertifications)
            {

                if (certificate.CompareTo("false")!=0)
                {
                    var certificationToAdd = _ctx.Certifications.Find(int.Parse(certificate));
                    speakerCertification = new SpeakerCertification();
                    speakerCertification.CertificationId = certificationToAdd.Id;
                    speaker.Certifications.Add(speakerCertification);
                }

            }
        }


        _ctx.Speakers.Add(speaker);
        _ctx.SaveChanges();
        return true;
    }

1 个答案:

答案 0 :(得分:0)

View中,您可以拥有事件处理程序,但这些处理程序执行的操作只会影响视图。因此,我建议您初始化ViewModel,例如在它自己的构造函数中。

但如果您坚持在点击按钮后调用viewModel.Init(),则将Button绑定到从ViewModel公开的ICommand作为属性。

例如:

<Window.DataContext>
    <viewModel:ShellViewModel />
</Window.DataContext>

<Button Command="{Binding InitCommand}">Init</Button>
public ShellViewModel()
{
    InitCommand = new RelayCommand(Init);
}

public ICommand InitCommand { get; private set; }

private void Init()
{
    throw NotImplementedException();
}