gpt4 book ai didi

c# - 如果命令绑定(bind)解析为空,为什么启用按钮?

转载 作者:太空狗 更新时间:2023-10-30 00:07:44 26 4
gpt4 key购买 nike

好的,XAML 非常简单,使用 MVVM 绑定(bind)到 ICommand SomeCommand { get; View 模型上的属性:

<Button Command="{Binding Path=SomeCommand}">Something</Button>

如果 SomeCommand 返回 null,则按钮被启用。 (与 ICommand 上的 CanExecute(object param) 方法无关,因为没有调用该方法的实例)

现在的问题是:为什么启用该按钮?您将如何解决?

如果您按下“启用”按钮,显然不会调用任何内容。该按钮看起来已启用,这很难看。

最佳答案

我的同事找到了一个优雅的解决方案:使用绑定(bind)回退值!

public class NullCommand : ICommand
{
private static readonly Lazy<NullCommand> _instance = new Lazy<NullCommand>(() => new NullCommand());

private NullCommand()
{
}

public event EventHandler CanExecuteChanged;

public static ICommand Instance
{
get { return _instance.Value; }
}

public void Execute(object parameter)
{
throw new InvalidOperationException("NullCommand cannot be executed");
}

public bool CanExecute(object parameter)
{
return false;
}
}

然后 XAML 看起来像:

<Button Command="{Binding Path=SomeCommand, FallbackValue={x:Static local:NullCommand.Instance}}">Something</Button>

此解决方案的优势在于,如果您打破 Law of Demeter,它的效果会更好并且您在绑定(bind)路径中有一些点,其中每个实例都可能变为 null

关于c# - 如果命令绑定(bind)解析为空,为什么启用按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18447853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com