我是 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
。知道为什么会这样吗?绑定有问题吗?