5 changed files with 84 additions and 5 deletions
@ -0,0 +1,73 @@ |
|||
// Copyright (c) The Avalonia Project. All rights reserved.
|
|||
// Licensed under the MIT license. See licence.md file in the project root for full license information.
|
|||
|
|||
using ReactiveUI; |
|||
using System; |
|||
using System.ComponentModel; |
|||
using System.Collections; |
|||
|
|||
namespace BindingTest.ViewModels |
|||
{ |
|||
public class IndeiErrorViewModel : ReactiveObject, INotifyDataErrorInfo |
|||
{ |
|||
private int _maximum = 10; |
|||
private int _value; |
|||
private string _valueError; |
|||
|
|||
public IndeiErrorViewModel() |
|||
{ |
|||
this.WhenAnyValue(x => x.Maximum, x => x.Value) |
|||
.Subscribe(_ => UpdateErrors()); |
|||
} |
|||
|
|||
public bool HasErrors |
|||
{ |
|||
get { throw new NotImplementedException(); } |
|||
} |
|||
|
|||
public int Maximum |
|||
{ |
|||
get { return _maximum; } |
|||
set { this.RaiseAndSetIfChanged(ref _maximum, value); } |
|||
} |
|||
|
|||
public int Value |
|||
{ |
|||
get { return _value; } |
|||
set { this.RaiseAndSetIfChanged(ref _value, value); } |
|||
} |
|||
|
|||
public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged; |
|||
|
|||
public IEnumerable GetErrors(string propertyName) |
|||
{ |
|||
switch (propertyName) |
|||
{ |
|||
case nameof(Value): |
|||
return new[] { _valueError }; |
|||
default: |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
private void UpdateErrors() |
|||
{ |
|||
if (Value <= Maximum) |
|||
{ |
|||
if (_valueError != null) |
|||
{ |
|||
_valueError = null; |
|||
ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(nameof(Value))); |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
if (_valueError == null) |
|||
{ |
|||
_valueError = "Value must be less than Maximum"; |
|||
ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(nameof(Value))); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue