ViewModelBaseクラス（MVVM Light Toolkit リファレンス）

# ViewModelBase
## 概要

```csharp
public abstract class ViewModelBase : ObservableObject, ICleanup
```

- MVVMパターンのビューモデルの基底クラスに使う。

##### 名前空間
- `GalaSoft.MvvmLight`

#### アセンブリ
- GalaSoft.MvvmLight


## メソッド
### コンストラクター
<details><summary>コンストラクター</summary><div>

```csharp
public ViewModelBase()
public ViewModelBase(GalaSoft.MvvmLight.Messaging.IMessenger messenger)
```

##### 概要
- 引数を`MessengerInstance`プロパティに設定する。
- 引数がない場合、`MessengerInstance`プロパティに`null`を設定する。
</div></details>


### Broadcast
<details><summary>Broadcast</summary><div>

```csharp
protected virtual void Broadcast<T>(T oldValue, T newValue, string propertyName)
```

##### 概要
- プロパティ名（`propertyName`）、元の値（`oldValue`）、新しい値（`newValue`）を指定し、`PropertyChangedMessage`を送る。
</div></details>


### Cleanup
<details><summary>Cleanup</summary><div>

```csharp
public virtual void Cleanup()
```

##### 概要
- `ICleanup`インターフェイスの実装。
- `MessengerInstance`からこのインスタンスの登録を解除する。
- その他のクリーンアップ処理が必要な場合は、このメソッドをオーバーライドし、オーバーライドしたメソッドからこのメソッドを呼ぶこと。
</div></details>


### RaisePropertyChanged
<details><summary>RaisePropertyChanged</summary><div>

```csharp
public virtual void RaisePropertyChanged<T>(string propertyName = null, T oldValue = null, T newValue = null, bool broadcast = False)
public virtual void RaisePropertyChanged<T>(System.Linq.Expressions.Expression<System.Func<T>> propertyExpression, T oldValue, T newValue, bool broadcast)
```

##### 概要
- 指定したプロパティを引数にして、`RaisePropertyChanged`メソッドを呼ぶ。
- `broadcast`が`true`の場合、`Broadcast`メソッドを呼ぶ。

##### 例外
- `System.ArgumentException`: 指定した名前を持つプロパティが存在しない。
</div></details>


### Set
<details><summary>Set</summary><div>

```csharp
protected bool Set<T>(string propertyName, ref T field, T newValue = null, bool broadcast = False)
protected bool Set<T>(System.Linq.Expressions.Expression<System.Func<T>> propertyExpression, ref T field, T newValue, bool broadcast)
protected bool Set<T>(ref T field, T newValue = null, bool broadcast = False, string propertyName = null)
```

##### 概要
- `field`に`newValue`を代入する。
- `field`の値が変化したら、`propertyName`や`propertyExpression`を引数にして`RaisePropertyChanged`メソッドを呼ぶ。
- `broadcast`が`true`の場合、`Broadcast`メソッドを呼ぶ。

##### 戻り値
- `field`の値が変化したら`true`、変化しなかったら`false`を戻す。

##### 例外
- `System.ArgumentException`: 指定した名前を持つプロパティが存在しない。
</div></details>


## プロパティ
### IsInDesignMode
<details><summary>IsInDesignMode</summary><div>

```csharp
public bool IsInDesignMode { get; }
```

##### 概要
- デザイン・モード（Visual StudioやBlendで編集中である状態）かどうかを戻す。
</div></details>


### IsInDesignModeStatic
<details><summary>IsInDesignModeStatic</summary><div>

```csharp
public static bool IsInDesignModeStatic { get; }
```

##### 概要
- デザイン・モード（Visual StudioやBlendで編集中である状態）かどうかを戻す。
</div></details>


### MessengerInstance
<details><summary>MessengerInstance</summary><div>

```csharp
protected GalaSoft.MvvmLight.Messaging.IMessenger MessengerInstance { get; set; }
```

##### 概要
- `Broadcast`メソッドが使う`IMessenger`インターフェイスのインスタンス。
- `null`が設定された場合、`Messenger`クラスの`Default`プロパティを戻す。
</div></details>


## 参照
- [目次](https://qiita.com/h084/items/c5355fa734936c56ca50/)
- [ObservableObject](https://qiita.com/h084/items/4fb49d902201d8526166)
- [ICleanup](https://qiita.com/h084/items/1be8c8a323ad5f4c8491)
- [Messenger](https://qiita.com/h084/items/4359bdfbd75b48755309)
- [IMessenger](https://qiita.com/h084/items/e879feae2f3f1ca3363b)