C# 从代码隐藏触发RelayCommand

C# 从代码隐藏触发RelayCommand,c#,mvvm-light,C#,Mvvm Light,我的应用程序有一个主页,它由许多其他窗口组成。其中之一是我的应用程序设置,通过单击主页上的按钮打开/关闭。此窗口有一个视图模型以及两个按钮“保存”和“取消”。按“取消”可恢复以前的设置,保存时只存储这些设置。现在,当我使用主菜单关闭属性时,我希望调用Cancel,我想知道最好的方法 因此,在我的视图模型中,我有如下内容: public RelayCommand CancelRC { get; private set; } public PropertiesViewModel { Ca

我的应用程序有一个主页,它由许多其他窗口组成。其中之一是我的应用程序设置,通过单击主页上的按钮打开/关闭。此窗口有一个视图模型以及两个按钮“保存”和“取消”。按“取消”可恢复以前的设置,保存时只存储这些设置。现在,当我使用主菜单关闭属性时,我希望调用Cancel,我想知道最好的方法

因此,在我的视图模型中,我有如下内容:

public RelayCommand CancelRC { get; private set; }

public  PropertiesViewModel
{
    CancelRC = new RelayCommand(RestoreProperties)
}

private RestoreProperties
{
     // Restore
}
在我的主页中.xaml.cs

private void Properties_Click(object sender, RoutedEventArgs e)
{
    if (PropertiesForm.Visibility == Visibility.Collapsed)
    {
        PropertiesForm.Visibility = Visibility.Visible;
        PropertiesForm.IsSelected = true;
    }
    else
    {
        PropertiesForm.Visibility = Visibility.Collapsed;
        IncidentForm.IsSelected = true;

        // Send a Cancel relaycommand to the Properties View Model?
    }
}
对我来说,显而易见的解决方案是手动触发RelayCommand,但我不确定这是最合适的方式,我也不确定您将如何触发它。那么,这是一种做这件事的方式,还是有一种更可取的方式来做类似的事情


类似地,通过主页手动隐藏和显示属性是最好的方法吗?

删除属性\u Click方法,并在xaml中执行以下操作:

<Button Command="{Binding CancelRC}">Properties</Button>
属性

这将导致按钮使用RelayCommand.CanExecute和RelayCommand.Execute,而不使用代码。代码假定窗口datacontext设置为您的视图模型。

听起来很有趣,我不知道这是可能的。这是否意味着所有的Galasoft
EventtoCommand
内容都是不必要的?但我不完全确定这是否有助于按钮处理程序在隐藏和显示窗口方面需要做什么。
CanExecute
Execute
是用来以编程方式驱动
RelayCommand
的吗?我猜这仍然意味着主页需要直接访问视图模型或向其发送消息?Galasoft EventToCommand非常有用。主窗口不一定需要访问属性窗口视图模型,相反,您可以为主页创建一个视图模型,并让两个视图模型相互了解或相互传递消息。MVVM视图模型中的“理想”应该控制视图,包括要显示的内容、可见性、应用程序流等。您可以直接或使用属性转换器将windows可见性绑定到视图模型中的属性。这与我最后所做的类似。我的意思是,虽然说得很糟糕,但对于Silverlight上的按钮来说,EventToCommand是不必要的,因为根据您的回答,使用它似乎是不必要的。你的评论+回答意味着我接受了这一点。谢谢