- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设您有一个按钮,其 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;
}
}
编辑:
一些注意事项:
DoSomethingCmd.CanExecute
做某事将尽一切努力提供帮助,因为没有 DoSomethingCmd
在没有当前项目时访问。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/
有人可以给我一个想法,例如将高度从0添加时动画化,并在移除时返回0动画化? 最佳答案 添加动画时很容易,只需将Animated中的componentDidMount与listRow一起使用,例如: c
我目前有一个包含 3 个选项卡的 tabview。 1 选项卡加载 ActivityGroup,然后加载 listview。我有这个,所以我可以加载不同的 Activity 并查看并仍然显示选项卡。当
此正则表达式 /({{(?!{*textdata.*)#\s*.[\w\.]+\.*}})/gm在 chrome 上使用正则表达式只给我两个匹配项(期望 4)。当我在 http://www.regex
我一直在尝试从头开发一个简单的 Accordion ,但这个问题让我无法这样做。 我正在尝试实现一种效果,您可以在其中展开元素,内容弹出,加号图标变成目标 Accordion 元素的减号 - 至此一切
当用户点击 tabbaritem 进入 uitabbarcontroller 来改变某些东西时,我需要检索..这是我的代码: - (void)tabBar:(UITabBar *)tabBar did
我尝试使用 kv_t 存储一些数据但没有成功。我也尝试过例子forum.c & kv.c。当尝试创建第二个论坛线程时,forum.c 挂起,而 kv.c 崩溃。 当我向 kv 添加 1 个项目时,kv
我正在为 map 构建一个主题选择器,并希望反射(reflect)当前选择的主题。 该代码似乎有效,但从不返回“li”项目的值,它总是为我单击的任何“li”项目返回“s-thumbs”。我尝试使用 .
我正在浏览 Go 并想了解以下内容: package main import "fmt" func main() { s := []int{2, 3, 5, 7, 11, 13} pr
我正在使用 VS2013、.net4.5、WPF 桌面应用程序。 Xaml: CS: this
我正在尝试创建一个搜索抛出 ListView 项目的 Activity 。我创建了一个 switch与 case Category其中 Category是 main 中的一项 ,但是当我单击该项目时,
我是一名优秀的程序员,十分优秀!