IDataErrorInfo не срабатывает в случае столбца int DataGrid - PullRequest
1 голос
/ 08 апреля 2011

У меня есть DataGrid со столбцом, который связан со свойством типа int. Я использую IDataErrorInfo для проверки. Мои правила проверки работают нормально, они запускаются, как только я меняю значение ячейки. Допустим, пользователь вводит значение меньше 0, я показываю соответствующую ошибку во всплывающей подсказке. Проблема возникает, когда пользователь очищает значение текстового поля. В этом случае IDataErrorInfo никогда не срабатывает, и в результате я не могу показать ошибку проверки пользователя через всплывающую подсказку о том, что значение не может быть пустым. DataGrid делает красную рамку вокруг текстового поля, и это хорошо, а '!' подписать в заголовке строки, но во всплывающей подсказке ошибки проверки нет, так как IDataErrorInfo никогда не запускался. Могу ли я что-нибудь сделать, чтобы запустить информацию IDataError в случае очистки значения текстового поля?

Edit:
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 ]

2 голосов
/ 08 апреля 2011

Вы должны опубликовать свои привязки и показать нам свой объект itemssource. я предполагаю, что ваше свойство, к которому вы привязываете, имеет тип int, поэтому, если вы очистите текстовое поле, привязка wpf попытается установить для свойства int значение null. возникает ошибка привязки, потому что ваш int не обнуляется. и из-за ошибки привязки у вашего idataerror нет шансов на запуск, потому что он не будет вызван. вы можете попытаться добавить ValidatesOnExceptions = true к привязке столбца таблицы данных, чтобы увидеть ошибку.

0 голосов
/ 08 апреля 2011

Как вы можете видеть из ошибки, конвертирование StringToNumber является броском, вы можете попробовать использовать свой собственный IValueConverter для преобразования String в Int и наоборот.и, возможно, по умолчанию он преобразует пустую строку в 0 (где ваш IDataErrorInfo должен сработать и показать ошибку)

...