最好使用CanExecute还是转换器?

时间:2016-03-24 14:55:28

标签: c# wpf

我正在开发一个仪表板应用程序,它使用框架来切换窗口上的页面。出于显而易见的原因,当用户在登录页面上时,我正在禁用“主页”等按钮。

目前我正在使用转换器将我的按钮的IsEnabled属性绑定到当前页面是否为登录页面,如下所示:

[ValueConversion(typeof(Page), typeof(bool))]
public class IsNotLoginPageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return !(value is Login);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new InvalidOperationException("Converter cannot convert back.");
    }
}

IsEnabled="{Binding Path=CurrentPage, Converter={StaticResource IsLoginPage}}"

但是我想知道是否更好地将命令绑定到Can Executes,如下所示:

bool isNotLoginPage()
{
    return !(CurrentPage is Login);
}

RelayCommand home;
public ICommand Home
{
    get { return home ?? (home = new RelayCommand(homeExecute, isNotLoginPage)); }
}
void homeExecute()
{
    Switcher.Switch(new MainPage());
}

我可以看到它会减少代码,但它们是否还有其他任何优势(例如开销)?我无法在网上找到比较这两种方法的任何内容。

0 个答案:

没有答案