gpt4 book ai didi

validation - Windows 商店应用程序上的输入验证

转载 作者:行者123 更新时间:2023-12-03 10:28:11 25 4
gpt4 key购买 nike

在使用 MVVM 的 Windows 商店应用程序中,我有一个带有两种方式绑定(bind)的 TextBox,它应该只允许数值。当按下非数字键时,使用 MVVM 简单地忽略的正确程序是什么?

INotifyPropertyChanged 更改的值仅在文本框失去焦点时触发。我基本上想要对我的属性进行即时验证。我找不到一个合适的简单例子。

最佳答案

为什么不创建一个附加属性来包含此行为?像这样的东西:

public class TextBoxHelper
{
public static bool GetRestrictToNumerical(DependencyObject obj)
{
return (bool)obj.GetValue(RestrictToNumericalProperty);
}

public static void SetRestrictToNumerical(DependencyObject obj, bool value)
{
obj.SetValue(RestrictToNumericalProperty, value);
}

public static readonly DependencyProperty RestrictToNumericalProperty =
DependencyProperty.RegisterAttached("RestrictToNumerical", typeof(bool), typeof(TextBoxHelper), new PropertyMetadata(false, onRestrictToNumericalChanged));

private static void onRestrictToNumericalChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var tb = d as TextBox;
if (tb == null)
return;

if ((bool)e.NewValue)
tb.KeyDown += tb_KeyDown;
else
tb.KeyDown -= tb_KeyDown;
}

static void tb_KeyDown(object sender, Windows.UI.Xaml.Input.KeyRoutedEventArgs e)
{
e.Handled = e.Key < VirtualKey.Number0 || e.Key > VirtualKey.Number9;
}
}

您可以像这样在 XAML 中使用它:
<Page
x:Class="App4.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App4"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<TextBox VerticalAlignment="Center" local:TextBoxHelper.RestrictToNumerical="True" InputScope="Number" />
</Grid>
</Page>

This ,在我看来,对于您可能需要执行的所有输入验证,这是一种干净的 MVVM 方法。对于您的简单问题,这可能有点矫枉过正,但对于更复杂的验证很有用。

关于validation - Windows 商店应用程序上的输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26740891/

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