从代码隐藏中触发RelayCommand

时间:2011-11-22 17:17:17

标签: c# mvvm-light

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

所以在我的视图模型中,我有类似的东西:

public RelayCommand CancelRC { get; private set; }

public  PropertiesViewModel
{
    CancelRC = new RelayCommand(RestoreProperties)
}

private RestoreProperties
{
     // Restore
}

在我的MainPage.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,但我不确定这是否是最合适的方法,我不知道你怎么会触发它。所以这是做到这一点的方式,还是有更优选的方式来做这样的事情?

同样是手动隐藏并通过主页面显示属性,这是最好的方法吗?

1 个答案:

答案 0 :(得分:1)

删除Properties_Click方法,并在xaml中执行以下操作:

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

这将导致按钮使用RelayCommand.CanExecute和RelayCommand.Execute,而无需使用代码。代码假定窗口datacontext设置为View Model。