Click here to Skip to main content
15,887,256 members
Home / Discussions / WPF
   

WPF

 
GeneralRe: DataGrid Exception Pin
Kevin Marois29-Nov-23 7:12
professionalKevin Marois29-Nov-23 7:12 
GeneralRe: DataGrid Exception Pin
Kevin Marois29-Nov-23 8:13
professionalKevin Marois29-Nov-23 8:13 
GeneralRe: DataGrid Exception Pin
Richard Deeming29-Nov-23 22:22
mveRichard Deeming29-Nov-23 22:22 
GeneralRe: DataGrid Exception Pin
Kevin Marois30-Nov-23 6:46
professionalKevin Marois30-Nov-23 6:46 
QuestionCustom Control Style Question Revisited Pin
Kevin Marois30-Oct-23 9:14
professionalKevin Marois30-Oct-23 9:14 
AnswerRe: Custom Control Style Question Revisited Pin
Gerry Schmitz30-Oct-23 12:20
mveGerry Schmitz30-Oct-23 12:20 
GeneralRe: Custom Control Style Question Revisited Pin
Kevin Marois31-Oct-23 8:01
professionalKevin Marois31-Oct-23 8:01 
QuestionUI Validation Problem Pin
Kevin Marois10-Oct-23 13:10
professionalKevin Marois10-Oct-23 13:10 
I am implementing INotifyDataErrorInfo. Here's my base ViewModel
public class _ViewModelBase : BindableBase, INotifyDataErrorInfo
{
    #region Events
    public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
    #endregion

    #region Private Fields
    public readonly Dictionary<string, List<string>> _validationErrors = new Dictionary<string, List<string>>();
    #endregion

    #region Properties
    public bool HasErrors => _validationErrors.Any();
    #endregion

    #region Public Methods
    public IEnumerable GetErrors(string propertyName)
    {
        return _validationErrors.ContainsKey(propertyName) ? _validationErrors[propertyName] : null;
    }
    #endregion

    #region Protected Methods
    protected void AddError(string propertyName, string error)
    {
        if (!_validationErrors.ContainsKey(propertyName))
        {
            _validationErrors[propertyName] = new List<string>();
        }

        if (!_validationErrors[propertyName].Contains(error))
        {
            _validationErrors[propertyName].Add(error);
            RaiseErrorsChanged(propertyName);
        }
    }

    protected void ClearErrors(string propertyName)
    {
        if (_validationErrors.ContainsKey(propertyName))
        {
            _validationErrors.Remove(propertyName);
            {
                RaiseErrorsChanged(propertyName);
            }
        }
    }
    #endregion

    #region Private Methods
    private void RaiseErrorsChanged(string propertyName)
    {
        ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propertyName));
    }
    #endregion
}
Here's my CustomerView
<TextBlock Grid.Row="0"
           Text="Customer Name"/>
<TextBox Grid.Row="1"
         Grid.Column="0"
         Text="{Binding CustomerName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
         IsEnabled="{Binding AreFieldsEnabled}">

    <Validation.ErrorTemplate>
        <ControlTemplate>
            <StackPanel>
                <AdornedElementPlaceholder x:Name="textBox" />
                <ItemsControl ItemsSource="{Binding}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding ErrorContent}" Foreground="Red" />
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>
        </ControlTemplate>
    </Validation.ErrorTemplate>

</TextBox>
Here's my CustomerViewModel (parts ommited)
private void Validate()
{
    ClearErrors(nameof(Customer.CustomerName));

    if (string.IsNullOrWhiteSpace(Customer.CustomerName))
    {
        AddError(nameof(Customer.CustomerName), "The Customer Name cannot be empty.");
    }

}

private void Customer_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    IsChanged = true;

    Validate();
    RaiseChangedEvent();
}

The problem is that if I use complex nation, as in Customer.CustomerName instead of just CustomerName, the validation text does not appear. The error gets added to the collection, but I don't see it.

What's wrong here?
In theory, theory and practice are the same. But in practice, they never are.”
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.

AnswerRe: UI Validation Problem Pin
Richard Deeming10-Oct-23 22:13
mveRichard Deeming10-Oct-23 22:13 
GeneralRe: UI Validation Problem Pin
Kevin Marois12-Oct-23 7:25
professionalKevin Marois12-Oct-23 7:25 
GeneralRe: UI Validation Problem Pin
Richard Deeming12-Oct-23 21:34
mveRichard Deeming12-Oct-23 21:34 
AnswerRe: UI Validation Problem Pin
Gerry Schmitz12-Oct-23 8:52
mveGerry Schmitz12-Oct-23 8:52 
GeneralRe: UI Validation Problem Pin
Kevin Marois12-Oct-23 14:54
professionalKevin Marois12-Oct-23 14:54 
GeneralRe: UI Validation Problem Pin
Gerry Schmitz12-Oct-23 19:12
mveGerry Schmitz12-Oct-23 19:12 
GeneralRe: UI Validation Problem Pin
Kevin Marois16-Oct-23 12:50
professionalKevin Marois16-Oct-23 12:50 
QuestionUI Validation Questions Pin
Kevin Marois29-Sep-23 15:54
professionalKevin Marois29-Sep-23 15:54 
AnswerRe: UI Validation Questions Pin
Richard Deeming1-Oct-23 21:43
mveRichard Deeming1-Oct-23 21:43 
QuestionCustom Control Style Question Pin
Kevin Marois14-Sep-23 12:35
professionalKevin Marois14-Sep-23 12:35 
AnswerRe: Custom Control Style Question Pin
Gerry Schmitz14-Sep-23 12:57
mveGerry Schmitz14-Sep-23 12:57 
GeneralRe: Custom Control Style Question Pin
Kevin Marois15-Sep-23 5:33
professionalKevin Marois15-Sep-23 5:33 
GeneralRe: Custom Control Style Question Pin
Gerry Schmitz15-Sep-23 5:58
mveGerry Schmitz15-Sep-23 5:58 
GeneralRe: Custom Control Style Question Pin
Kevin Marois15-Sep-23 14:54
professionalKevin Marois15-Sep-23 14:54 
Question.Net Core System.Windows.Data Namespace Pin
Kevin Marois6-Sep-23 17:51
professionalKevin Marois6-Sep-23 17:51 
AnswerRe: .Net Core System.Windows.Data Namespace Pin
Richard Deeming6-Sep-23 21:19
mveRichard Deeming6-Sep-23 21:19 
QuestionLinux - Make an overlay or something like this... Pin
Alex 5326-Aug-23 23:02
Alex 5326-Aug-23 23:02 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.