Button.IsEnabled
无法正常工作。
我已经调试了代码,属性的setter被“true”值击中。但按钮仍然禁用。
View.xaml:
<StackPanel Grid.Row="2" Margin="0,20,0,0" >
<Button Name="ButtonOk" Content="OK" Margin="0,0,4,0" IsEnabled="{Binding SomethingIsValid}" Command="{Binding CommandOk}" />
<Button Name="ButtonCancel" Content="Cancel" Margin="0,0,4,0" IsCancel="True" /
</StackPanel>
View.xaml.cs:
...
public View(ViewModel viewModel)
{
this.InitializeComponent();
this.viewModel = viewModel;
this.DataContext = viewModel;
}
视图模型:
public bool SomethingIsValid
{
get
{
return somethingIsValid;
}
set
{
this.somethingIsValid= value;
this.RaisePropertyChanged(() => this.SomethingIsValid);
}
}
#region IDataErrorInfo
public string this[string columnName]
{
get
{
this.SomethingIsValid= false;
if ("SomeName" == columnName)
{
if (string.IsNullOrEmpty(this.Status))
{
return "Please bla bla..";
}
}
this.SomethingIsValid = true;
return string.Empty;
}
}
public string Error
{
get
{
return string.Empty;
}
}
#endregion
public ICommand CommandOk
{
get
{
if (this.commandOk == null)
{
this.commandOk = new RelayCommand(this.CommandOkAktion, () => this.SomethingIsValid );
}
return this.commandOk;
}
}
7条答案
按热度按时间4c8rllxm1#
如果任何人仍然有问题,请确保IsEnabled属性位于Command属性之后。
请注意,我的两个命令总是可以执行。对我来说更容易解决。
v440hwme2#
如果使用的是命令,则单独绑定按钮的IsEnabled属性不是一个好主意。相反,您应该在命令的“CanExecute”中提供正确的值。这也将启用该按钮。
ki1q1bka3#
如果你使用的是RelayCommand,你可以使用第二个参数作为boolean方法来指示命令是否可以执行:
使用方法:
kuhbmx9i4#
从我在你发布的代码中看到的,如果没有调用
this["SomeName"]
,你的SomethingIsValid
将永远是false
,这就是为什么你的按钮显示disabled
。我的建议/解决方案是:从xaml中删除
IsEnabled
绑定(如果命令绑定正常工作,则不需要此操作):将您的ViewModel代码更改为如下所示(您当前的命令定义是OK的,因此不更改该部分)。下面的代码确保在执行
CanCommandExecute
时,它将重新检查SomethingIsValid
:8cdiaqws5#
你必须在ViewModel中实现INotifyPropertyChanged接口,这样当属性被更新时,视图也会被notfied。
看看这个https://msdn.microsoft.com/en-US/library/system.componentmodel.inotifypropertychanged%28v=vs.110%29.aspx
x9ybnkn66#
如果你像这样使用命令:
然后您可以将
boolean
作为参数传入Relay属性,如下所示:更多详细信息,请参阅MAUI文档。
piv4azn77#
我通过绑定IsEnabled的值解决了这个问题。将其显式设置为False不起作用。
成功了:
这不起作用: