【发布时间】:2020-03-02 12:24:38
【问题描述】:
我有一个与文本框(WPF)绑定的双类型属性。当我用空文本框失去焦点时,控件没有击中 set 属性。 如果我给出一个像 10.2 这样的有效输入,那么它会达到 viewmodel 的 set 属性。即使有无效数据,是否有任何解决方案来控制 set 属性?
Settings.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");
}
}
【问题讨论】:
-
请分享您的代码
-
"... 设置属性,即使存在无效数据" - 这本身就是矛盾的。
-
考虑使用
OnPropertyChanged(nameof(SkylineMinPeakRatio));,因为它在重命名属性时更容易处理。