我是 MVVM 模式的新手。
我想知道为什么每次TextChanged()触发我的事件时,绑定的IsEnabled()属性都不会改变它的状态。该TextChanged()事件正在调用IsValid()以检查数据验证。
我有这个简单的ViewModel课程
public class myViewModel : ViewModel
{
public bool IsOk { get; set; }
public RelayCommand OnValidateExecute { get; set; }
public myViewModel()
{
OnValidateExecute = new RelayCommand(p => IsValid(), p => true);
}
public bool IsValid()
{
// other codes
IsOk = MethodName();
NotifyPropertyChanged("IsOk");
}
}
我设置了一个断点,IsValid()代码工作正常。我想知道为什么IsEnabled财产没有按预期工作。
这是我的XAML代码
<TextBox ...other propeties here....>
<i:Interaction.Triggers>
<i:EventTrigger EventName="TextChanged">
<i:InvokeCommandAction Command="{Binding OnValidateExecute}">
</i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
<Button x:Name="btnSave" IsEnabled="{Binding IsOk, Mode=TwoWay}"
...other propeties here....>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:InvokeCommandAction Command="{Binding OnSaveExecute}">
</i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
我想要的是当IsOk属性为假时,按钮应该是Disabled,否则,Enabled。
我的数据绑定有问题吗?如果以前有人问过这个问题,请帮助我重定向到它。
更新 1
我在这段代码中遇到的另一个问题是,IsValid()在文本框上设置值之前首先触发了该函数。这是一个示例,假设文本框的起始值为0,当我将其更改为 9 时,将检查的值是以前的值0而不是9。知道为什么会这样吗?绑定有问题吗?