3

我有以下 XAML -

<TextBox Text="{Binding Path=NumberOfItems, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
<Button Command="{Binding Path=StartCommand}">Start</Button>

在 ViewModel -

public string this[string columnName]
    {
        get
        {
            string result = null;
            switch (columnName)
            {
                 case "NumberOfItems":
                    if (this.NumberOfItems <= 0)
                    {
                        result = "Items required";
                    }
                    break;
            }

            return result;
        }
    }

每当 TextBox 更改值时,触发器就会相应地工作。但在以下情况下,它不起作用 -

  1. 当用户在选择文本框的整个文本后按下键盘上的删除按钮时。

  2. 当用户删除 TextBox 中存在的最后一个字符时。

但是 ValidatesOnDataError 正在工作。

TextBox 清空时如何使其工作?

当用户输入任何无效数据时,文本框样式会发生变化。我希望在单击开始按钮时知道这一点。

我怎样才能知道 TextBox 有无效数据的开始按钮?

4

2 回答 2

4

我猜您正在尝试将整数类型的属性绑定到文本框的文本属性。由于整数不能为空,因此空字符串在这种情况下不起作用。您可以使用可为空的整数,也可以创建自己的转换器来处理空字符串。

于 2013-02-13T09:27:24.250 回答
1

当用户输入任何无效数据时,文本框样式会发生变化。我希望在单击开始按钮时知道这一点。

我怎样才能知道 TextBox 有无效数据的开始按钮?

将您的验证码更改为:

 case "NumberOfItems":
                if (this.NumberOfItems==null || this.NumberOfItems <= 0)
                {
                    result = "Items required";
                }
                break;

您可以string.IsNullOrEmpty(this["NumberOfItems"])CanExceuteStartCommand您的StartCommand

于 2013-02-13T10:11:13.820 回答