◆ DataContext のクラスはそのクラス固有のクラス
◆ 他でつかわないんだからインナークラスのほうが構造きれい
  ◆ Window 系と同じ階層に置くと補完候補にも出て邪魔
◆ 関連度合いが高く同時に見たいことがあるから同じファイルのほうが都合がいい

私はよく DataContext にするクラスはその Window や UserControl のインナークラスにしてます

こんなの
public partial class MainWindow : Window
{
    private class BindingData : BindingDataBase
    {
        public string prop { get; set; }
    }

    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new BindingData();
    }
}

さいしょに調べてた時にこういう書き方のコードがいくつかあったこともありますが 一応この方がいいと思ってやってます

Binding するクラスというのは その Window など対応するコントロール固有のデータで基本的には他で使えない専用のものです
それなら その Window などのクラスの内部に作って基本 private アクセス修飾子をつけておくのがいいと思います

他で使えないのを公開範囲に置いておくと補完候補に並んで邪魔ですし
外部から扱うことがあっても 「本来はその Window 用の DataContext」 というところは変わらないと思うのでアクセスするときに MainWindow.BindingData のようにしたほうが探しやすくなんのデータなのかもコードからわかりやすく思います

また 同じファイル内なので見比べやすいです
そのクラスが使われる Window と密接に関係があるので両方を開きたいことが多いです
別ファイルなら両方開くのが面倒ですし見比べる時にタブを探して 開いて とやってるのはけっこう面倒で時間をとられるものです
同じファイルだとスクロールすればいいですし ちょっと長くても Ctrl-F でジャンプできます

欠点は 思いつく範囲だと DataContext を XAML で設定できないくらいです
WPF の XAML ではインナークラスのインスタンス作れないようです

私は DataContext はコード側で設置する派なので特に問題ないです


インナークラス派が主流でいいと思うのですが 最近見かけるものではインナークラス派は少数派に思います
わざわざ分けるメリットってなんなんだろう