我有一个 WPF 视图,其中包含一个 TextBox,将其 Text 字段绑定到 ViewModel,并将 UpdateSourceTrigger 设置为 PropertyChanged。在 ViewModel 中的属性设置器中,我进行了一个简单的检查以防止文本超过 10 个字符:
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
}
public string Name
{
get { return _Name; }
set
{
if (_Name != value)
{
if (value.Length <= 10)
{
_Name = value;
}
RaisePropertyChanged("Name");
}
}
}
如果值没有设置,我仍会调用RaisePropertyChanged(它只是触发属性更改)。问题是当我在UI中输入第11个字符时,我没有更新_Name。 我触发了PropertyChanged事件,我可以看到get访问器被调用并返回只有10个字符的字符串。 但是,我的TextBox没有反映这一点;它仍然显示具有11个字符的字符串。
此外,如果在第11个字符上,我将setter中的文本更改为“ERROR”,并触发属性更改,则TextBox会更新以显示已更改的文本。
那么,如果我将setter中的文本更改回先前的值,为什么UI不会反映这一点呢?
我知道有处理最大字符的替代方法,但为什么这种方法行不通?