gpt4 book ai didi

c# - 当没有当前项时,如何禁用绑定(bind)到当前项的 ICommand 的按钮?

转载 作者:太空狗 更新时间:2023-10-29 17:39:26 26 4
gpt4 key购买 nike

假设您有一个按钮,其 command属性绑定(bind)到一些 ICommand一些收藏的当前项目。

当集合为null时,该按钮保持启用状态,点击它似乎是一个空操作。相反,我希望该按钮保持禁用状态。当集合为空时,我想出了以下方法来禁用按钮。然而,对于可以或许以更自然、更简单、更像 MVVM 的方式完成的事情来说,这似乎有点太复杂了。

因此问题来了:是否有更简单的方法来禁用该按钮,最好是在不使用代码隐藏的情况下?

.xaml:

<Button Content="Do something" >
<Button.Command>
<PriorityBinding>
<Binding Path="Items/DoSomethingCmd" />
<Binding Path="DisabledCmd" />
</PriorityBinding>
</Button.Command>
</Button>

.cs:

public class ViewModel : NotificationObject
{
ObservableCollection<Foo> _items;

public DelegateCommand DisabledCmd { get; private set; }

public ObservableCollection<Foo> Items {
get { return _items; }
set { _items = value; RaisePropertyChanged("Items"); }
}

public ViewModel()
{
DisabledCmd = new DelegateCommand(DoNothing, CantDoAnything);
}

void DoNothing() { }
bool CantDoAnything()
{
return false;
}
}

编辑:

一些注意事项:

  1. 知道我可以使用 lambda 表达式,但在这个示例代码中我没有。
  2. 知道谓词是什么。
  3. 我不知道如何使用 DoSomethingCmd.CanExecute 做某事将尽一切努力提供帮助,因为没有 DoSomethingCmd在没有当前项目时访问。
  4. 因此我将重新定位我的问题:如何避免使用 DisabledCmd ?我对提升 DoSomethingCmd 不感兴趣因为这不是我要找的。否则我不会问这个问题。

另一个编辑:

所以我基本上采用了这个答案作为解决方案:WPF/MVVM: Disable a Button's state when the ViewModel behind the UserControl is not yet Initialized?

我相信,这正是 hbarck 提出的。

最佳答案

我会像 akjoshi 那样做,只是我会使用普通触发器而不是 DataTrigger,并且我会检查 Button.Command 是否为空。由于禁用没有命令的按钮总是有意义的(特别是在没有点击事件处理程序的 MVVM 中),将此触发器包含到按钮的默认样式中也是一个好主意,以便具有此行为在整个应用程序的所有按钮上...我看不出有理由使用虚拟命令。

关于c# - 当没有当前项时,如何禁用绑定(bind)到当前项的 ICommand 的按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10648538/

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