Created
May 15, 2018 01:10
-
-
Save PulkitSethi1984/38cc87a73048ebb0b0fd2374d36be2ba to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.ComponentModel; | |
using System.Linq.Expressions; | |
using System.Reflection; | |
using System.Runtime.CompilerServices; | |
using System.Threading.Tasks; | |
using Xamarin.Forms; | |
namespace App.Common.Core.ViewModels | |
{ | |
public class BaseViewModel : INotifyPropertyChanged | |
{ | |
bool isBusy = false; | |
public bool IsBusy | |
{ | |
get { return isBusy; } | |
set { SetProperty(ref isBusy, value); } | |
} | |
string title = string.Empty; | |
public string Title | |
{ | |
get { return title; } | |
set { SetProperty(ref title, value); } | |
} | |
protected bool SetProperty<T>(ref T backingStore, T value, | |
[CallerMemberName]string propertyName = "", | |
Action onChanged = null) | |
{ | |
if (EqualityComparer<T>.Default.Equals(backingStore, value)) | |
return false; | |
backingStore = value; | |
onChanged?.Invoke(); | |
OnPropertyChanged(propertyName); | |
return true; | |
} | |
#region INotifyPropertyChanged | |
public event PropertyChangedEventHandler PropertyChanged; | |
protected void OnPropertyChanged([CallerMemberName] string propertyName = "") | |
{ | |
var changed = PropertyChanged; | |
if (changed == null) | |
return; | |
changed.Invoke(this, new PropertyChangedEventArgs(propertyName)); | |
} | |
#endregion | |
protected void RaisePropertyChanged([CallerMemberName] string propertyName = "") | |
{ | |
this.OnPropertyChanged(propertyName); | |
} | |
public void RaisePropertyChanged<T>(Expression<Func<T>> property) | |
{ | |
var name = GetMemberInfo(property).Name; | |
OnPropertyChanged(name); | |
} | |
private MemberInfo GetMemberInfo(Expression expression) | |
{ | |
MemberExpression operand; | |
LambdaExpression lambdaExpression = (LambdaExpression)expression; | |
if (lambdaExpression.Body as UnaryExpression != null) | |
{ | |
UnaryExpression body = (UnaryExpression)lambdaExpression.Body; | |
operand = (MemberExpression)body.Operand; | |
} | |
else | |
{ | |
operand = (MemberExpression)lambdaExpression.Body; | |
} | |
return operand.Member; | |
} | |
public virtual Task InitAsync(object parameter) | |
{ | |
return Task.FromResult(true); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment