我有两个按钮:
在我的视图中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();
}
这不完全,但我希望这足以解决问题:)
我试过但我无法做到这一点,这意味着:我希望第二个按钮只有在点击第一个按钮时才会激活。你有什么简单的想法吗?
答案 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();
让我知道它是否对你有帮助。