wpf - 控件未命中设置的属性 wpf mvvm
问题描述
我有一个与文本框(WPF)绑定的双类型属性。当我用空文本框失去焦点时,控件没有击中 set 属性。如果我给出一个像 10.2 这样的有效输入,那么它会达到 viewmodel 的 set 属性。即使有无效数据,是否有任何解决方案来控制 set 属性?
设置.xaml
<StackPanel Orientation="Horizontal" Margin="10,0,0,10" Height="20">
<TextBlock Text="Minimum Peak Ratio:" Width="145"></TextBlock>
<TextBox Text="{Binding SkylineMinPeakRatio,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Style="{StaticResource InputStyle}">
<i:Interaction.Behaviors>
<Behaviors:TextBoxInputBehavior InputMode="DecimalInput"/>
</i:Interaction.Behaviors>
</TextBox>
<Button x:Name="MinPeakRatioError" Margin="5,0,0,0" Visibility="{Binding MinPeakRatioInfoVisibility,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
<Image Source="..\Images\ErrorInfo.jpg"></Image>
<Button.ToolTip>
<ToolTip>
<StackPanel>
<TextBlock FontWeight="Bold" Text="{Binding MinPeakRatioErrMsg}"></TextBlock>
<TextBlock Text="{Binding MinPeakRatioErrMsgDescription}"></TextBlock>
</StackPanel>
</ToolTip>
</Button.ToolTip>
</Button>
</StackPanel>
SettingsViewModel.cs
private double skylineMinPeakRatio
public double SkylineMinPeakRatio
{
get
{
return skylineMinPeakRatio;
}
set
{
skylineMinPeakRatio=value;
OnPropertyChanged("SkylineMinPeakRatio");
}
}
解决方案
你有一些方法来处理这个问题(顺便说一句,你在 wpf 中得到一个强制转换异常,这就是你的属性设置器没有被命中的原因)。
- 在一个完美的 mvvm 世界中,您可以将所有类型的属性设置为字符串,并且您的绑定将起作用,并且您也可以轻松地进行错误验证。这样做的缺点 - 您现在必须将您的属性转换为正确的类型,只要您的值进入模型。
- 在您的特殊情况下,您可以使用Nullable Double。但是如果有人在你的 TextBox 中放了一些字母,你又会遇到同样的问题。你的二传手不会击中。您可以使用行为或数字文本框来处理此问题。
推荐阅读
- powershell - 无法格式化 Powershell foreach 输出并将其附加到电子邮件正文和主题
- python-3.x - 如何在 Python 中返回类属性列表?
- php - 每月自动更改用户密码并将密码发送到特定电子邮件
- python - 如何从 Django 中的外键值中取平均值?
- r - 子集 data.table 基于单独的 data.table
- c# - 为什么隐式转换在 C# 中不起作用
- c# - 单击按钮 c# 时获取管理员访问权限
- java - Eclipse IDE 无法在我的系统中启动
- java - Does it make sense to have a separate microservice for thread pool in Java?
- android - 如何在 React-Native 中仅获得数字键盘?