假设您有一个按钮,其command
属性绑定到ICommand
某些集合的当前项目.
当集合是null
,按钮保持启用状态,单击它似乎是一个无操作.我希望该按钮保持禁用状态.我想出了以下内容,以便在集合为空时保持按钮被禁用.不过,看来的东西,可能有点太令人费解或许在这样一个更自然的,更简单,更MVVM来完成.
因此,问题是:是否有一种更简单的方法可以禁用该按钮,理想情况下不使用代码隐藏?
的.xaml:
<Button Content="Do something" >
<Button.Command>
<PriorityBinding>
<Binding Path="Items/DoSomethingCmd" />
<Binding Path="DisabledCmd" />
</PriorityBinding>
</Button.Command>
</Button>
Run Code Online (Sandbox Code Playgroud)
的.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;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
几个笔记:
DoSomethingCmd.CanExecute
会做任何事情来帮助,因为DoSomethingCmd
没有当前项目时无法访问.DisabledCmd
?我并不感兴趣,DoSomethingCmd
因为它不是我想要的.否则我不会问这个问题.另一个编辑:
所以我基本上采用了这个答案作为解决方案:WPF/MVVM:当UserControl后面的ViewModel尚未初始化时,禁用Button的状态?
我相信,这正是hbarck提出的建议.
我做的类似于akjoshi,只有我使用普通的Trigger而不是DataTrigger,我会检查Button.Command为null.因为禁用没有Command的Button总是有意义的(特别是在MVVM中,没有click事件处理程序),所以将这个触发器包含在Buttons的默认样式中也是一个好主意,以便具有这种行为在整个应用程序的所有按钮上...我没有看到使用虚拟命令的理由.
归档时间: |
|
查看次数: |
1714 次 |
最近记录: |