2011-04-08 55 views
1

我有一個與'int'類型屬性綁定的列的DataGrid。我正在使用IDataErrorInfo進行驗證。我的驗證規則工作正常,只要我更改單元格的值,它們就會被解僱。假設用戶輸入的值小於0,我在工具提示中顯示相應的錯誤。用戶清除文本框的值時出現問題。在這種情況下,IDataErrorInfo從不會觸發,因此我無法通過提示說該值不能爲空來顯示用戶驗證錯誤。 DataGrid圍繞文本框製作紅色邊框,這很好,還有一個'!'在行標題處簽名,但在工具提示中沒有驗證錯誤,因爲IDataErrorInfo從未被觸發。如果文本框的值被清除,我能做些什麼來觸發IDataError信息?IDataErrorInfo不在int列的情況下觸發DataGrid

編輯:
XAML

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding DisplayOrder, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True, ValidatesOnDataErrors=True}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <TextBox Text="{Binding DisplayOrder, UpdateSourceTrigger=PropertyChanged}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn> 

DisplayOrder物業

public int DisplayOrder 
{ 
    get 
    { 
     return m_DisplayOrder; 
    } 
    set 
    { 
     if(value != m_DisplayOrder) 
     { 
      m_DisplayOrder = value; 
      OnPropertyChanged("DisplayOrder"); 
     } 
    } 
} 

回答

2

你應該張貼您的綁定,並告訴我們您的ItemsSource對象。我假設你綁定的屬性是int類型,所以如果你清除了文本框,wpf綁定嘗試將int屬性設置爲null。發生綁定錯誤,導致你的int不能爲空。並且由於綁定錯誤,您的idataerror沒有機會觸發,因此不會被調用。您可以嘗試將ValidatesOnExceptions = true添加到您的datagrid列綁定中以查看錯誤。

+0

即使我加上「ValidateOnExceptions = TRUE」 IDataErrorInfo的不開除,我不看到任何提示消息,無論是 – 2011-04-08 09:13:44

+0

激活綁定錯誤以進行調試,並查看輸出窗口以查看綁定錯誤。那裏你應該找到更多的信息。我真的認爲這個問題是你的int類型。當你清除你的文本框wpf嘗試將null設置爲int並且這會導致異常(並且你的setter不會被調用!)。 ValidateOnExceptions = True應該也會提供這些信息,但也許你必須檢查你的datagridcell的驗證模板。 – blindmeis 2011-04-08 09:22:37

+0

將您的類型更改爲可爲空,以查看您的二傳手是否被調用。 – blindmeis 2011-04-08 09:23:45

0

正如你從錯誤中看到的,StringToNumber轉換是拋出,你可以嘗試使用你自己的IValueConverter將String轉換爲Int和其他方式。也許在默認情況下,將空字符串轉換爲0(如果您IDataErrorInfo的應該踢的,並顯示錯誤)

相關問題