mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2024-12-25 21:07:20 -08:00
55 lines
2.2 KiB
C#
55 lines
2.2 KiB
C#
|
using System.ComponentModel;
|
||
|
using System.Runtime.CompilerServices;
|
||
|
|
||
|
namespace SourceGit.Views.Controls {
|
||
|
|
||
|
/// <summary>
|
||
|
/// Implementation of <see cref="INotifyPropertyChanged" /> to simplify models.
|
||
|
/// </summary>
|
||
|
public abstract class BindableBase : INotifyPropertyChanged {
|
||
|
/// <summary>
|
||
|
/// Multicast event for property change notifications.
|
||
|
/// </summary>
|
||
|
public event PropertyChangedEventHandler PropertyChanged;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Checks if a property already matches a desired value. Sets the property and
|
||
|
/// notifies listeners only when necessary.
|
||
|
/// </summary>
|
||
|
/// <typeparam name="T">Type of the property.</typeparam>
|
||
|
/// <param name="storage">Reference to a property with both getter and setter.</param>
|
||
|
/// <param name="value">Desired value for the property.</param>
|
||
|
/// <param name="propertyName">
|
||
|
/// Name of the property used to notify listeners. This
|
||
|
/// value is optional and can be provided automatically when invoked from compilers that
|
||
|
/// support CallerMemberName.
|
||
|
/// </param>
|
||
|
/// <returns>
|
||
|
/// True if the value was changed, false if the existing value matched the
|
||
|
/// desired value.
|
||
|
/// </returns>
|
||
|
protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null) {
|
||
|
if (Equals(storage, value)) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
storage = value;
|
||
|
this.OnPropertyChanged(propertyName);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Notifies listeners that a property value has changed.
|
||
|
/// </summary>
|
||
|
/// <param name="propertyName">
|
||
|
/// Name of the property used to notify listeners. This
|
||
|
/// value is optional and can be provided automatically when invoked from compilers
|
||
|
/// that support <see cref="CallerMemberNameAttribute" />.
|
||
|
/// </param>
|
||
|
protected void OnPropertyChanged([CallerMemberName] string propertyName = null) {
|
||
|
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|