PDA

View Full Version : استفاده از CommandBinding و اجرا شدن در هر حالتی



PetekDincos
سه شنبه 14 دی 1389, 17:37 عصر
با سلام
من در فرمم برای کلیدهای هات از CommandBinding استفاده می کنم به صورت زیر
ابتدا در Code Behind فرمم یک متغییر از نوع RoutedCommand



public static RoutedCommand WinOKCommand=new RoutedCommand();
private void CanExecutedCommand(object sender,CanExecutedEventArgs e)
{
Control targer=(Control)sender;
if(targer==null){
e.CanExecute=false;
return;
}
e.CanExecute=true;


}



private void OKCommand(object sender,ExecutedEventArgs e)
{
MessageBox.Show("ddddddd");
}



بعد در کد XAML فرمم این کار را انجام می دم



<Window ....
xmlns:local="clr-namespace:namespacewin" />
<Window.CommandBinding>
<CommandBindign Command="local:Win.winOKCommand CanExecute="CanExecuteCommand" Execte="OKCommand" />
</Window.CommandBindign>
<Window.InputBinding>
<InputBindign Key="F5" Command="local:Win.winOKCommand CanExecute="CanExecuteCommand" />
</Window.InputBinding>
<Grid>
<Button Command="local:Win.winOKCommand CanExecute="CanExecuteCommand" />
</Grid>
</Window>



و وقتی حتی Button غیر فعال یا Visible اش Hidden است با زدن کلید F5 این Command اجرا می شود حتی در رویداد CanExecutedCommand این موارد را هم برای اجرایش چک کردم اما با اجرا شد نمی دونم این از خاصیت های Command است یا من از کد اشتباهی استفاده می کنم با تشکر

رضا عربلو
سه شنبه 14 دی 1389, 20:51 عصر
کد داخل CanExecutedCommand حتی وقتی که button ات disable است باز مقدار true بر می گرداند.
در ضمن هنگامی که یک کامند را تعریف می کنید می توانید آنرا به هر روشی فرا بخوانبد. یعنی کامندتان لزوماً به یک دکمه محدود نمی شود و شنا می توانید آن کامند را به هر روشی فرابخوانید. (بازدن یک دکمه، فشار دادن کلید F5و ...)

PetekDincos
سه شنبه 14 دی 1389, 21:05 عصر
کد داخل CanExecutedCommand حتی وقتی که button ات disable است باز مقدار true بر می گرداند.
در ضمن هنگامی که یک کامند را تعریف می کنید می توانید آنرا به هر روشی فرا بخوانبد. یعنی کامندتان لزوماً به یک دکمه محدود نمی شود و شنا می توانید آن کامند را به هر روشی فرابخوانید. (بازدن یک دکمه، فشار دادن کلید F5و ...)

با سلام
من الان باید چیکار کنم که وقتی دکمه غیرفعال است Command اجرا نشود با تشکر

رضا عربلو
چهارشنبه 15 دی 1389, 11:09 صبح
<Button x:Name="btnOk" Command="local:Win.winOKCommand CanExecute="CanExecuteCommand" />
....
private void CanExecutedCommand(object sender,CanExecutedEventArgs e) { Control targer=(Control)sender;
if(targer.IsEnabled==fasle){ e.CanExecute=false; return; } e.CanExecute=true;
}

PetekDincos
چهارشنبه 15 دی 1389, 12:27 عصر
<Button x:Name="btnOk" Command="local:Win.winOKCommand CanExecute="CanExecuteCommand" />
....
private void CanExecutedCommand(object sender,CanExecutedEventArgs e) { Control targer=(Control)sender;
if(targer.IsEnabled==fasle){ e.CanExecute=false; return; } e.CanExecute=true;
}

با سلام
من قبل از اینکه سوالم رو مطرح کنم در داخل رویداد CanExecutedCommand موارد مربوط به Enable و Visible کنترل target رو چک کردم اما میگم باز متد مربوط به Command اجر می شه می تونید خودتون هم تست کنید به نظر من تنها راهی که است اینه که داخل خود متد OKCommand موارد Enable و Visible را برای اجرا شدن خود متد چک کرد و به نظر من راه درستی نیست یا اینکه ..... با تشکر

رضا عربلو
پنج شنبه 16 دی 1389, 10:28 صبح
موقعي که دکمه اي را enable ویا disable می کنی و کلاً شرايط اجرای کامند تغییر می کند دستور CommandManager.InvalidateRequerySuggested(); را فرا بخوان تا دوباره شرايط اجرای کامندها بررسی شوند.
http://msdn.microsoft.com/en-us/library/system.windows.input.commandmanager.invalidaterequ erysuggested.aspx
http://msdn.microsoft.com/en-us/library/system.windows.input.commandmanager.requerysuggest ed.aspx