C# wpf工具栏中的非活动命令
我有一个带有工具栏(添加和删除命令)和TabControl的应用程序。TabControl的每个tabItem中都有可变网格控件 请看图片: 禁用工具栏中的命令的情况很少:C# wpf工具栏中的非活动命令,c#,wpf,toolbar,routedcommand,C#,Wpf,Toolbar,Routedcommand,我有一个带有工具栏(添加和删除命令)和TabControl的应用程序。TabControl的每个tabItem中都有可变网格控件 请看图片: 禁用工具栏中的命令的情况很少: 应用程序运行时 当我点击DataGrid的灰色区域时 当DataGrid为空时 当选择DataGrid的任意一行时,工具栏的命令将变为活动状态 你能帮我解决这个问题吗?我应该设置哪些工具栏按钮的CommandTarget PS:我的应用程序中有两个可变网格。这就是为什么我不能将CommandTarget设置为“{Bindin
PS:我的应用程序中有两个可变网格。这就是为什么我不能将CommandTarget设置为“{Binding ElementName=variableGrid}”。我认为应该设置为FocusedElement。但是我不知道怎么做。WPF应该每隔一段时间调用您的
CanRemoveRow
方法,检查是否可以删除一行。你应该在这个方法中加入一个布尔条件来回答这个问题。如果希望AddRowCommand
具有类似的功能,请添加一个CanAddRow
方法,在其中绑定AddRowCommand
您可能需要阅读MSDN上的
更新>>>
哦。。。您想知道针对这些禁用条件使用什么代码吗?我想是这样的:
应用程序运行时
我猜你的意思是“当应用程序繁忙时”。。。添加名为IsBusy
的布尔属性,当应用程序执行任何长时间运行的进程时将其设置为true,然后添加!IsBusy
进入您的方法状态
当我点击DataGrid的灰色区域时
当DataGrid为空时
通过添加和&DataGrid.SelectedItem!=null
输入到方法条件中
因此,您需要以下内容:
private void CanRemoveRow(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = !IsBusy && SelectedItem != null);
}
这是正确的。AddRowCommand有这个默认方法,它总是返回true。在这种情况下(1,2,3),不会调用CanRemoveRow方法。这不适合我:我有几个网格,问题是我不知道如何将命令绑定到活动网格,这应该可以帮到你。
public partial class VariableGrid : DataGrid, INotifyPropertyChanged
{
public static RoutedCommand AddRowCommand = new RoutedCommand();
public VariableGrid()
{
this.CommandBindings.Add(new CommandBinding(VariableGrid.AddRowCommand, AddRow));
this.CommandBindings.Add(new CommandBinding(ApplicationCommands.Delete, R emoveRow, CanRemoveRow));
}
private void AddRow(object sender, ExecutedRoutedEventArgs e)
{
…
}
private void RemoveRow(object sender, ExecutedRoutedEventArgs e)
{
…
}
private void CanRemoveRow(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = (SelectedItems.Count > 0);
}
}
private void CanRemoveRow(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = !IsBusy && SelectedItem != null);
}