在CommandParameter的情况下,wpf按钮可见性

时间:2017-09-08 16:15:07

标签: c# wpf


我需要制作这样的按钮:

        <fluent:Button 
        Size="Middle"
        Visibility="{Binding Path=SomeTestingMethod}" 
        Command="{Binding Path=OtherMethod}" CommandParameter="PP" 
        Some Text</fluent:Button>

在&#34; CommandParameter&#34;的情况下是否可见?我试过了:

public Visibility SomeTestingMethod(object o)
{
    return o.ToString == "something" ? Visibility.Visible : Visibility.Collapsed;
}

但编译器甚至不检查它。也试过这样的东西:

        private Visibility _someTestingMethod;
    public Visibility SomeTestingMethod
    {
        get  {
            var commandExecutor = new RelayCommand(ButtonVisibility);

            return _statusButtonsVisibility;
            }
    }

    public void ButtonVisibility(object o)
    {
        _statusButtonsVisibility =
                     o.ToString == "something" ? Visibility.Visible : Visibility.Collapsed;
    }

&#34; SomeTestingMethod&#34;然后到达但是&#34; ButtonVisibility&#34;不。 我找到了其他方法来获得可见性,但是没有一个方法可以让我获得CommandParameter。
如何正确地做到这一点?

2 个答案:

答案 0 :(得分:1)

我对所提供的代码有一些评论。

首先,如果用户不点击它,你真的想让按钮消失吗?我问,因为ICommand接口有一个CanExecute()方法,它可以保存逻辑以确定命令是否可以执行。当按钮绑定到属性时,该属性是实现ICommand界面的对象的实例,该按钮将根据CanExecute()的结果自动启用/禁用自身逻辑。请注意,如果该逻辑在不同的线程上执行某些操作,则可能必须强制重新查询命令的可用性。

如果您确实希望按钮消失而不是被禁用,正如@Jason Boyd在评论中所提到的那样,最好通过将可见性绑定到视图模型中的布尔属性来实现。使用BooleanToVisibilityConverter根据属性的真/假显示/隐藏按钮。

视图模型应该实现INotifyPropertyChanged接口来传递属性更改以更新绑定目标。

希望这能为您提供正确的方向。

答案 1 :(得分:0)

您无法在绑定到Visibility属性的属性中获取CommandParameter

OtherMethod方法中获取参数并更改SomeTestingMethod属性。 或者您可以使用自定义BoolToVisibility转换器来使用参数。