仅当单击另一个按钮wpf datagrid时,才会启用按钮

时间:2018-05-23 09:19:23

标签: wpf button datagrid isenabled

我有两个按钮:

在我的视图中MainView.xaml

<StackPanel Grid.Row="2" Grid.Column="3" VerticalAlignment="Center">
                <Button Name="wec" Height="50" Content="Podgląd" Margin="15 15 15 0" Command="{Binding ViewCommand}"/>
                <Button Height="50" Content="Drukuj" Margin="15 15 15 0"  Command="{Binding ElementName=pv, Path=PrintCommand}">
                </Button>
            </StackPanel>
            <local:PrintPreview Grid.Row="4" x:Name="pv" Grid.ColumnSpan="3" PrintingClass="{Binding Model.PrintingClass, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" PrintModel="{Binding Model.PrintingModel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

我的第一个按钮 - 命令可以查看文档的打印方式。 第二个按钮 - 命令打印此文档以及PrintPreview.xaml.cs下面的代码

private DelegateCommand printCommand;
    public DelegateCommand PrintCommand
    {
        get
        {

            if (printCommand == null)
                printCommand = new DelegateCommand(print);
            return printCommand;
        }
        set
        {
            if (printCommand != value)
            {
                printCommand = value;
            }
        }
    }

    public bool IsFirstButtonClicked { get; set; }

    private bool PrintCommandCanExecute(object unused)
    {
        return this.IsFirstButtonClicked;
    }

 private void print(object x)
    {
        setPageSettings();
        WB.Print();
    }

这不完全,但我希望这足以解决问题:)

我试过但我无法做到这一点,这意味着:我希望第二个按钮只有在点击第一个按钮时才会激活。你有什么简单的想法吗?

1 个答案:

答案 0 :(得分:0)

首先,创建一个bool属性,以便在知道何时单击第一个按钮时,将其称为IsFirstButtonClicked。

在您的打印命令中,您应该添加一个CommandCanExecute,如:

private bool SecondCommandCanExecute(object unused)
 {
   return this.IsFirstButtonClicked;
 }

当您单击第一个按钮时,将IsFirstButtonClicked(bool属性)设置为true并引发PrintCommandCanExecute。

我猜你有一个ICommand FirstCommand。你应该创建一个这样的类:

public class RelayCommand : ICommand
{
private Action<object> _action;
private Func<bool> _func;  

public RelayCommand(Action<object> action,Func<bool> func)
{
    _action = action;
    _func = func;
}

public void RaiseCanExecuteChanged()
{
    if(CanExecuteChanged!=null)
        CanExecuteChanged(this,new EventArgs());
}

#region ICommand Members

public bool CanExecute(object parameter)
{
    if (_func != null)
       return _func();
    return true;
}



public event EventHandler CanExecuteChanged;

public void Execute(object parameter)
{
    _action(parameter);
}

#endregion
}

现在你的SecondCommand应该是这样的RelayCommand:

RelayCommand SecondCommand = new RelayCommand(yourCommandExecute, this.SecondCommandCanExecute)

现在,当您单击FirstButton时,将IsFirstButtonClicked设置为true,然后调用SecondCommand.RaiseCanExecuteChanged();

让我知道它是否对你有帮助。