我正在学习WAF和WPF(我很新手)。
我已经分析了很多时间来弄清楚如何在BookLibrary示例中设置元素属性,但我无法弄清楚。
当我查看BookListView.xaml中ToobarTray的删除按钮代码
时<Button Command="{Binding RemoveCommand}">
<AccessText Text="{x:Static p:Resources.RemoveMenu}"/>
</Button>
没有属性可以禁用此按钮。 残疾人财产代码在哪里? 当用户在datagrid中选择一行时,我找不到启用此按钮的代码。 启用/禁用如何工作?
与ShellWindow中的工具栏托盘按钮相同。
<Button Command="ApplicationCommands.Undo" Content="{StaticResource UndoImage}" ToolTip="{x:Static p:Resources.Undo}"/>
<Button Command="ApplicationCommands.Redo" Content="{StaticResource RedoImage}" ToolTip="{x:Static p:Resources.Redo}"/>
<Button Command="ApplicationCommands.Cut" Content="{StaticResource CutImage}" ToolTip="{x:Static p:Resources.Cut}"/>
<Button Command="ApplicationCommands.Copy" Content="{StaticResource CopyImage}" ToolTip="{x:Static p:Resources.Copy}"/>
<Button Command="ApplicationCommands.Paste" Content="{StaticResource PasteImage}" ToolTip="{x:Static p:Resources.Paste}"/>
上面的按钮肯定有不透明属性, 但是代码级别没有不透明度。 此外,当用户更改数据网格中的数据时,这些按钮的不透明度将更改为100%。 但是我找不到关于这个的代码。 这件事怎么样?
你能解释一下这些是怎么回事吗?
答案 0 :(得分:1)
我的猜测是Command="{Binding RemoveCommand}"
绑定到ViewModel中的DelegateCommand
成员(DelegateCommand
是WAF提供的ICommand
的实现)。 DelegateCommand
有一个可以带两个参数的构造函数。第一个参数指定单击按钮时要执行的操作。第二个指定启用按钮的时间。例如,它可能看起来像这样:
...
RemoveCommand= new DelegateCommand(Remove, CanRemove);
...
private void Remove()
{
//Remove logic
}
private bool CanRemove()
{
//When you are able to remove. For example, return SelectedItem != null;
}
如果您浏览viewmodel代码,您应该找到类似于上面的内容。当CanRemove
返回false时,将禁用按钮/菜单项。要传播此状态的更改,DelegateCommand
实现RaiseCanExecuteChanged
。这就是按钮被禁用的方式,即使它没有明确存在于XAML中。