- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近一直在使用 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/
我不确定为什么要使用 RaisePropertyChanging , 当通知 View fx: private LoggingLvl _myLoggingLvl; public Loggin
在这里,我向我的 View 模型添加了一个模型: public dal.UserAccount User { get { return _user; } set {
我已经将 MVVM 与我的 WPF 应用程序一起使用了一段时间,但是我试图让一个按钮保持禁用状态,直到它可以启用为止。没问题,我将在 ViewModel 中创建一个 bool 并将其绑定(bind)到
我有一个按钮,其内容与 ViewModel 的名为 Test 的属性绑定(bind)。 单击按钮时,我正在更改其内容 private void button1_Click(object sender
我有一个模型用户: public class User { public string Name { get; set; } public int Level { get; set;
为了在通用应用程序中获取 MvvmCross PropertyChanged 事件,我必须设置 ShouldAlwaysRaiseInpcOnUserInterfaceThread(false)。你能
我在模型类的 IDataErrorInfo 的实现部分中编写了此代码,以便在清除错误后清除错误。 我不明白这里用空字符串引发了哪个属性刷新? if (raiseNotification)
我有以下用于单选按钮绑定(bind)的类 public class RadioButtonSwitch : ViewModelBase { IDictionary _optio
我无法在 View Model 的 SET 属性中定位断点,因此默认值未更改。 (Get - 没问题,它用有效的默认值初始化我的文本框。) 我有一个model.cs定义公共(public)字符串字
如果我想通过 RaisePropertyChanged 更新我的 UI,我会遇到一个奇怪的行为。我使用 this post 的第二个解决方案(由 Johnathan1 提供) :我实现了 RadioB
我正在使用 mvvm-light,我注意到有关 RaisePropertyChanged 的这种奇怪行为。 xaml: 可观察类: public class A : ObservableObj
根据 MSDN doc on PropertyChanged ,如果将空字符串传递给该方法,则会刷新所有属性。使用MvvmLight RaisePropertyChanged 时有这样的事情吗?传递
我目前正在学习 MVVM,我不明白 RaisePropertyChanged 有多重要 例如这个函数: public City SelectedCity { get {
我在 Windows Phone Silverlight 应用程序中使用 MVVM Light。 我真的不明白 RaisePropertyChanged 应该如何工作;让我解释一下,用这样的代码 pr
我正在寻找一种解决方案,以在其中一个内部属性发生变化时触发整个属性的 PropertyChanged。所以这是模型: public class MainStatus : ObservableObjec
由于某种原因,我无法让 UI 响应 RaisePropertyChanged。卡住了。 CurrentClient 是不向 UI 触发的部分。真的很奇怪。 希望有人可以帮助我。谢谢斯科特 public
我有 public override bool RelatedProperty { get { return this.SomeProperty > 0; }
NotificationObject 中此方法有一个重载:- protected void RaisePropertyChanged(Expression> propertyExpression);
当我的 ViewModel 更改时,我无法让我的 UI 更新两个列表框以正确更新。 首先,页面背后的基本逻辑: Movie 是一个带有标题的对象,以及各种MovieDetails。一些 MovieDe
我有一个类似于此的属性: private ISomething currentSomething; public ISomething CurrentSomething {
我是一名优秀的程序员,十分优秀!