2013-02-13 74 views
2

我有以下XAML变空UpdateSourceTrigger不工作 -当文本框

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

在视图模型 -

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

      return result; 
     } 
    } 

无论何时,文本框的变化值触发相应的工作。但在下列情况下,这是行不通的 -

  1. 当用户按下键盘按键删除选择文本的全文后。

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

但ValidatesOnDataError正在工作。

如何在TextBox清空时使其工作?

当用户输入任何无效数据时,文本框样式发生更改。我希望通过单击“开始”按钮来了解这一点。

如何知道开始按钮TextBox有无效数据?

回答

1

当用户输入任何无效数据时,文本框样式发生更改。我希望通过单击“开始”按钮来了解这一点。

如何知道开始按钮TextBox有无效数据?

改变你的验证代码:

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

你都可以StartCommand

+0

我试过你的解决方案,但同样的事情正在发生。当TextBox清空时,其样式会发生变化,但是string.IsNullOrEmpty(this [“NumberOfItems”])的结果总是为真 – user2039445 2013-02-13 10:37:09

+0

@ user2039445:您是否在绑定中添加了'TargetNullValue = {x:Static sys:String.Empty}'@Manish说? – Bolu 2013-02-13 10:48:27

+0

谢谢。它工作完美 – user2039445 2013-02-13 10:49:50

4

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

+0

CanExceuteStartCommand你是对的内查string.IsNullOrEmpty(this["NumberOfItems"])。我已将它设为空,但它不起作用。 – user2039445 2013-02-13 09:40:02

+5

Try this Text =“{Binding Path = NumberOfItems,NotifyOnSourceUpdated = True,TargetNullValue = {x:Static sys:String.Empty},ValidatesOnDataErrors = True}”您将不得不添加命名空间xmlns:sys =“clr-namespace: System; assembly = mscorlib“ – Manish 2013-02-13 09:46:30

+0

Thanks Manish,Text =”{Binding Path = NumberOfItems,NotifyOnSourceUpdated = True,TargetNullValue = {x:Static sys:String.Empty},ValidatesOnDataErrors = True}“工作! – sunil5715 2013-10-04 21:48:23