如何触发绑定到数字数据的文本框的属性集

发布于 2024-11-03 17:43:26 字数 219 浏览 3 评论 0原文

我刚刚注意到,当发生非数字事件(例如键入字母/空格或清除文本)时,绑定到数字数据的 WPF 文本框不会触发属性集。当我尝试验证文本框是否具有有效数字时,这成为一个问题。如果用户输入 5 并按退格键,则数据绑定属性仍为 5,而文本框显示为空!我无法禁用按钮来阻止进一步的进展。绑定到数字数据时是否可以启用非数字通知?或者,我是否被迫使用字符串属性/数据转换器?谢谢。

I just noticed that WPF textboxes bound to numeric data do not fire Property Set when non-numeric events happen such as letters/spaces typed or text cleared. This becomes a problem when I'm trying to validate that a textbox has a valid number. If the user types in 5 and presses backspace, the databound property remains 5 while the textbox appears empty! I have no way of disabling a button to stop further progress. Is there anyway to enable non-numeric notifications when bound to numeric data? Or, am I forced to use a string property/data converter? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

作业与我同在 2024-11-10 17:43:26

如果您不喜欢默认转换器,则需要创建自己的转换器,如果输入为空或无法解析,它会返回有效值。

public class IntBindingConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value.ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string input = value as string;
        if (String.IsNullOrWhiteSpace(input))
        {
            return 0;
        }
        else
        {
            int outInt;
            if (int.TryParse(input, out outInt))
            {
                return outInt;
            }
            else
            {
                return 0;
            }
        }
    }
}

用法示例:

<TextBox>
    <TextBox.Text>
        <Binding Path="Max">
            <Binding.Converter>
                <vc:IntBindingConverter/>
            </Binding.Converter>
        </Binding>
    </TextBox.Text>
</TextBox>

这可能看起来有点混乱,但通常您实际上只是阻止用户继续操作。

If you do not like the default converter you need to create your own which returns a valid value if the input is empty or unparsable.

public class IntBindingConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value.ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string input = value as string;
        if (String.IsNullOrWhiteSpace(input))
        {
            return 0;
        }
        else
        {
            int outInt;
            if (int.TryParse(input, out outInt))
            {
                return outInt;
            }
            else
            {
                return 0;
            }
        }
    }
}

Example usage:

<TextBox>
    <TextBox.Text>
        <Binding Path="Max">
            <Binding.Converter>
                <vc:IntBindingConverter/>
            </Binding.Converter>
        </Binding>
    </TextBox.Text>
</TextBox>

This may look a bit messy but normally you in fact just stop the user from proceeding.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文