Кнопка активна, только когда нажата другая кнопка. - PullRequest
0 голосов
/ 23 мая 2018

У меня есть 2 кнопки:

На мой взгляд 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 голосов
/ 23 мая 2018

Во-первых, создайте свойство bool, чтобы вы знали, что когда вы нажали первую кнопку, давайте назовем ее IsFirstButtonClicked.

В вашей команде Print вы должны добавить 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 ();

Дайте мне знать, помогло ли это вам.

...