Как отобразить окно сообщения об ошибке проверки текстового блока wpf

1

Я применил валидацию для шаблона ячейки Datagrid с помощью IDataErrorInfo и могу показать сообщение об ошибке всплывающей подсказки. Как я могу отобразить сообщение с информацией об ошибках вместо подсказки?

  <DataGridTemplateColumn Header="Code" MinWidth="150">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Code, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" Style="{StaticResource TextBlockStyle}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding Code, UpdateSourceTrigger=LostFocus}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
  </DataGridTemplateColumn>

  <Style x:Key="TextBlockStyle" TargetType="{x:Type TextBlock}">
           <Style.Triggers>
              <Trigger Property="Validation.HasError" Value="true">
                 <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},Path=(Validation.Errors)[0].ErrorContent}"/>
              </Trigger>
           </Style.Triggers>
  </Style>

Внедренный класс IDataErrorInfo

public class CurrencyExchangeRate : ObservableObject, IDataErrorInfo
{
    private string _code;
    public string Code
    {
        get { return _code; }
        set
        {
             if (_code != value)
            {
                _code = value;
                if (!string.IsNullOrEmpty(_code))
                {
                    RaisePropertyChangedEvent("Code");
                }
            }
        }
    }  

    public string this[string columnName]
    {
        get
        {
            string error = string.Empty;

            switch (columnName)
            {
                case "Code":

                    if (string.IsNullOrEmpty(_code))
                    {
                        error = "Code cannot be empty";
                        ShowMessage(error);
                    }
                    break;
            }
            return error;
        }
    }  
    public static void ShowMessage(string error)
    {
        System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() =>
        {
            System.Windows.Forms.MessageBox.Show(error);
        }));
    }
}    
  • 0
    Вы наверняка должны использовать код позади, XAML не может помочь в этом случае.
  • 0
    У меня есть реализованная ViewModel. Как получить информацию об ошибке в ViewModel при возникновении ошибки?
Показать ещё 3 комментария
Теги:
xaml
wpf
mvvm
messagebox

1 ответ

1
Лучший ответ

В вашем классе, реализующем IDataErrorInfo, добавьте в indexer MessageBox. Чтобы показать его только один раз после выхода из набора TextBox

 <TextBox Text="{Binding Code, UpdateSourceTrigger=LostFocus}"/>

он будет обеспечивать проверку проверки после потери фокуса.

  • 0
    Я обновил код с помощью UpdateSourceTrigger = LostFocus. Однако он отображается дважды.
  • 0
    Первый раз, когда подать второй на проверку, я прав?
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню