在 silverlight 中设置 IsEnabled = false 一个按钮
set IsEnabled = false a button in silverlight
我在 ViewModel class 中有以下代码,在构造函数中我定义启动表单时按钮始终启用 = false ...
public partial class EditarConceptoWindow : ChildWindow
{
public EditarConceptoWindow(string documentoId)
{
InitializeComponent();
viewModel.Saved += new EventHandler<Microsoft.Practices.Prism.Events.DataEventArgs<bool>>(ViewModel_Saved);
viewModel.Calculation += new EventHandler<Microsoft.Practices.Prism.Events.DataEventArgs<bool>>(ViewModel_Calculation);
this.DataContext = viewModel;
BtnCalcular.IsEnabled = false;
BtnObtenerTCRM.IsEnabled = false;
....... rest of code
在放置选中复选框时选中复选框的事件中,必须启用它才能设置为真,这取决于组合框的特定元素是否也被选中;
private void cbAgregarManual_Checked(object sender, RoutedEventArgs e)
{
if (this.ComboConcepto.SelectedValue.ToString() == "DPI")
{
BtnCalcular.IsEnabled = true;
BtnObtenerTCRM.IsEnabled= true;
}
}
当且仅当复选框被选中并在组合框中选择了 DPI 值时,才必须执行此操作。
但是按钮的行为是,当启动表单时,它们总是 IsEnabled = true 并且如果单击复选框控件(如果它有效)但我找不到原因,因为只有在我单击复选框之前它才有效,在 XAML.
中有一些控件(例如 TextBoxes,还有按钮)带有此指令
IsEnabled="{Binding ElementName=cbAgregarManual, Path=IsChecked }"
建议大家把启用的逻辑集中到一个属性,避免这种不匹配的逻辑设置混乱。
在这个新的 属性 中,它将使用 INotifyPropertyChanged
来通知该更改,但从其他属性调用。综上所述,当任何关联值发生变化时,它们都会对逻辑 属性 进行通知调用;该过程确保控件正确 en/dis-abled.
例子
比如这个伪代码,我检查了三个不同的其他属性:
public bool IsEnabledCombo { get { return ClickStatus
&& OtherStatus
&& !string.IsNullOrEmpty( UserText); }
public bool ClickStatus { get { return _clickStatus; }
set { _clickStatus = value;
NotifyPropertyChanged("ClickStatus");
NotifyPropertyChanged("IsEnabledCombo");
}}
public bool OtherStatus { get { return _otherStatus; }
set { _clickStatus = value;
NotifyPropertyChanged("OtherStatus");
NotifyPropertyChanged("IsEnabledCombo");
}}
public string UserText { ...
set { _userText = value;
NotifyPropertyChanged("UserText");
NotifyPropertyChanged("IsEnabledCombo");
这样绑定你的控件
IsEnabled="{Binding IsEnabledCombo }"
因此,只要相关值之一可以更改,它们也会调用 NotifyPropertyChanged("IsEnabledCombo");
并且控件状态会自动更新。
我在我的博客上提供了另一个类似的通知链接示例:
Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Binding
我在 ViewModel class 中有以下代码,在构造函数中我定义启动表单时按钮始终启用 = false ...
public partial class EditarConceptoWindow : ChildWindow
{
public EditarConceptoWindow(string documentoId)
{
InitializeComponent();
viewModel.Saved += new EventHandler<Microsoft.Practices.Prism.Events.DataEventArgs<bool>>(ViewModel_Saved);
viewModel.Calculation += new EventHandler<Microsoft.Practices.Prism.Events.DataEventArgs<bool>>(ViewModel_Calculation);
this.DataContext = viewModel;
BtnCalcular.IsEnabled = false;
BtnObtenerTCRM.IsEnabled = false;
....... rest of code
在放置选中复选框时选中复选框的事件中,必须启用它才能设置为真,这取决于组合框的特定元素是否也被选中;
private void cbAgregarManual_Checked(object sender, RoutedEventArgs e)
{
if (this.ComboConcepto.SelectedValue.ToString() == "DPI")
{
BtnCalcular.IsEnabled = true;
BtnObtenerTCRM.IsEnabled= true;
}
}
当且仅当复选框被选中并在组合框中选择了 DPI 值时,才必须执行此操作。
但是按钮的行为是,当启动表单时,它们总是 IsEnabled = true 并且如果单击复选框控件(如果它有效)但我找不到原因,因为只有在我单击复选框之前它才有效,在 XAML.
中有一些控件(例如 TextBoxes,还有按钮)带有此指令IsEnabled="{Binding ElementName=cbAgregarManual, Path=IsChecked }"
建议大家把启用的逻辑集中到一个属性,避免这种不匹配的逻辑设置混乱。
在这个新的 属性 中,它将使用 INotifyPropertyChanged
来通知该更改,但从其他属性调用。综上所述,当任何关联值发生变化时,它们都会对逻辑 属性 进行通知调用;该过程确保控件正确 en/dis-abled.
例子
比如这个伪代码,我检查了三个不同的其他属性:
public bool IsEnabledCombo { get { return ClickStatus
&& OtherStatus
&& !string.IsNullOrEmpty( UserText); }
public bool ClickStatus { get { return _clickStatus; }
set { _clickStatus = value;
NotifyPropertyChanged("ClickStatus");
NotifyPropertyChanged("IsEnabledCombo");
}}
public bool OtherStatus { get { return _otherStatus; }
set { _clickStatus = value;
NotifyPropertyChanged("OtherStatus");
NotifyPropertyChanged("IsEnabledCombo");
}}
public string UserText { ...
set { _userText = value;
NotifyPropertyChanged("UserText");
NotifyPropertyChanged("IsEnabledCombo");
这样绑定你的控件
IsEnabled="{Binding IsEnabledCombo }"
因此,只要相关值之一可以更改,它们也会调用 NotifyPropertyChanged("IsEnabledCombo");
并且控件状态会自动更新。
我在我的博客上提供了另一个类似的通知链接示例:
Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Binding