gpt4 book ai didi

c# - RaisePropertyChanged 无法更新 UI

转载 作者:行者123 更新时间:2023-11-30 13:01:25 25 4
gpt4 key购买 nike

我最近一直在使用 MVVM Light 开发一个应用程序。我的 XAML 中有一个 TextBox 绑定(bind)到我的 UI。我想验证任何输入并确保只输入数字。我尝试了以下代码:

我的文本框:

<TextBox TabIndex="1" Height="23" MinWidth="410" DockPanel.Dock="Left" 
HorizontalAlignment="Left"
Text="{Binding Input, UpdateSourceTrigger=PropertyChanged}"
IsEnabled="{Binding IsEnabled}"
AcceptsReturn="False"
local:FocusExtension.IsFocused="{Binding IsFocused}">

在我的 ViewModel 中:

private string input;
public string Input
{
get { return this.input; }
set
{
decimal test;
if(decimal.TryParse(value, out test))
{
this.input = value;
}
else
{
this.input = "";
}

RaisePropertyChanged("Input");
}
}

这无法更新 UI。如果我输入 “B” 并检查调试器,它会通过 setter 运行,但无法实际更新 UI

奇怪的是,如果我在 else block 中设置 this.input = "TEST";UI 会更新,但是,如果我尝试将其设置为 ""string.Empty 或验证前输入的值,UI 无法更新。

这是设计使然吗?可能是一个错误?我做错了什么吗?

编辑 我错误地忘记了在示例代码中包含 RaisePropertyChanged。我已经更新了。引发它不是问题,因为我已经看到调试器通过引发它并通过 getter 返回输入一直运行。

最佳答案

使用 strign 类型属性然后转换为十进制的方式,更容易像这样更改:

public decimal Input
{
get { return this.input; }
set
{
this.input = value;
RaisePropertyChanged("Input");
}
}

为了验证使用 IDataErrorInfo(阅读更多:http://blogs.msdn.com/b/wpfsdk/archive/2007/10/02/data-validation-in-3-5.aspx)

关于c# - RaisePropertyChanged 无法更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19734150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com