[C#][.NET][WPF] WPFと関連知識まとめ

  • 18
    いいね
  • 0
    コメント

C# + WPF(Windows Presentation Foundation) の開発に関わる便利ツール、情報のまとめ

この記事について

個人的なツールの作成向けに調査した内容のまとめになります。
Windowsだけ見ても業務への採用はいまだWinFormが強いらしいうえに、XamarinやUWPなどもありいまさらWPFはどうなんだろうというところもありますが、ある程度は枯れてますし、WinFormよりは画面を柔軟に作れるところもあるのでクロスプラットフォームを意識しないならWPFでもありなのではという印象です。(クロスプラットフォームを意識したデスクトップアプリ開発なら、Xamarin, JavaFX, Electronあたりになるんでしょうか?)
またWPF/Silverlight発のMVVMの考え方は他のGUIにも適用できるので、学習にもそれほど悪くはないのではないかと思います。(個人的にはVue.jsと合わせて学習するとわかりやすかったです)

C#の基本

文法

C# によるプログラミング入門 | ++C++; // 未確認飛行 C

C#7も含めて網羅されているため、ネット上の情報なら上のサイトが詳しかったです。

LINQ

LINQの拡張メソッド一覧と、ほぼ全部のサンプルを作ってみました。 - 地平線に行く
Modern C# 入門の備忘録 - Linq入門編 - Qiita
[C#][LINQ] nullを除外する - Qiita

例外

Exception クラス (System)
頻繁に使用する例外の一覧 - プログラマーな日々

WPF

概要

むずかしくないWPF - Qiita

XAML

基本

WPF4.5入門 その62「まとめ」 - かずきのBlog@hatena
連載:Windowsストア・アプリ開発入門:第3回 画面は「XAML」で作る(前編) (1/5) - @IT

Binding

[WPF] XAMLでの文字列のフォーマット指定とバインディング - Qiita

RelativeSource関連

WPFのRelativeSourceのはなし - HIDARI日記(右)
[WPF][MVVM] TreeViewItemの右クリックメニューからViewModelのCommandを実行する - Qiita

Style

wpf - XAMLのStyle.Triggersで複合条件を指定したい - スタック・オーバーフロー
【WPF】Visibilityってご存じですよね? | 創造的プログラミングと粘土細工
[WPF][XAML] デザインモード時のみ有効な背景色を設定する - Qiita

Converter

(XAML#15)「バインディングと値コンバーター」:IT's my business:オルタナティブ・ブログ
WPFのデータ変換 - Qiita
Nine Works WPFのStringFormatによるフォーマット指定
WPF DataConverter 用の基底クラス - Qiita

デザインフレームワーク

ButchersBoy/MaterialDesignInXamlToolkit: Google's Material Design in XAML & WPF, for C# & VB.Net.
ButchersBoy/Dragablz: Dragable and tearable tab control for WPF
MahApps/MahApps.Metro: A toolkit for creating Metro / Modern UI styled WPF apps.

パフォーマンス

WPFパフォーマンス関連の記事まとめ - Qiita
WPFでコレクションの表示を高速化するオプションとか - ゆうなんとかさんの雑記帳的な。

MVVMフレームワーク

MVVM Light Toolkit

個人的には、 MVVM Light Toolkit + Reactive Property の組み合わせが分かりやすかったため採用しています。

MVVM Light Toolkit
MVVM Light Toolkit V4.2.30 - Table of Content

日本語ドキュメントはあんまり無いですが、機能も最低限なのであまり困らないかもしれないです。

MVVMパターンのシンプルなサンプル(MVVM Light + ReactiveProperty) 言語: C#, XAML Visual Studio 2013 用

Prism

マイクロソフトの中の人が作ってるMVVMフレームワーク。

PrismLibrary/Prism: Prism is a framework for building loosely coupled, maintainable, and testable XAML applications in WPF, Windows 10 UWP, and Xamarin Forms.

Livet

いろいろ調べているとLivetも人気があります。
Livet - ProjectHome - the sea of fertility

2.x系はリポジトリは作成されているものの現状(2017/05)時点では止まっている様子
Livet 1.3(VS2015対応リリース) & Livet2について - the sea of fertility

Rx

Reactive Extention

ReactiveX
Reactive-Extensions/Rx.NET: The Reactive Extensions for .NET

解説記事

今更ですがRx再入門の記事をPDF化したやつをSlideShareに入れました - かずきのBlog@hatena

Reactive Property

runceel/ReactiveProperty
NuGet Gallery | ReactiveProperty 3.6.0

作者の方々の解説記事

ReactiveProperty オーバービュー - かずきのBlog@hatena
MVVMとリアクティブプログラミングを支援するライブラリ「ReactiveProperty v2.0」オーバービュー - かずきのBlog@hatena
ReactiveProperty v2.7.4をリリースしました - かずきのBlog@hatena
ReactiveProperty v2.9.0とv3.0.0-pre5をリリースしました。 - かずきのBlog@hatena
ReactivePropertyのコードスニペット - かずきのBlog@hatena
ReactivePropertyの後始末 - かずきのBlog@hatena
neue cc - ReactiveProperty ver 0.3.0.0 - MとVMのバインディングという捉え方

使用例

INotifyPropertyChangedなViewModelをReactivePropertyに移行するとどう変わるか - ぴーさんログ

テスト

ChainingAssertion

テスト時にいろいろと便利な拡張メソッドを定義してくれるパッケージ。
neuecc/ChainingAssertion: Method Chaining base UnitTesting Extension Methods and Dynamic Private Accessor for MSTest, NUnit, xUnit.net.

使用時の注意点

Parameterized Test, TestCaseSource使用時には public TestContext TestContext { get; set; } の定義が必須になります。
(こちらを定義しないとTextContext.Run()が存在しないというエラーで散々悩む羽目に・・・)
https://github.com/neuecc/ChainingAssertion#parameterized-test-for-mstest

[TestClass]
public class UnitTest
{
    public TestContext TestContext { get; set; } //必須

    [TestMethod]
    [TestCase(1, 2, 3)]
    [TestCase(10, 20, 30)]
    [TestCase(100, 200, 300)]
    public void TestMethod2()
    {
        TestContext.Run((int x, int y, int z) =>
        {
            (x + y).Is(z);
            (x + y + z).Is(i => i < 1000);
        });
    }
}

参考

JUnit実践入門 MSTest用パッチ #TddAdventJp - 亀岡的プログラマ日記

テストカバレッジ

OpenCover

OpenCover/opencover: A code coverage tool for .NET 2 and above (WINDOWS OS only), support for 32 and 64 processes with both branch and sequence points
NuGet Gallery | OpenCover - an open source code coverage tool for .NET 4.6.519
※注意:Nugetでリリースされているものはv4.6.519 時点ではVS2017(C#7.0)に未対応。対応版を現在開発中の様子

使用例記事

AppVeyorとCodecovを使ってC#のコードカバレッジを計測する - YoshinoriN's Memento

CI

Appveyor

Windowsの.NET環境のビルドができるCIサービス。VS2017にもすでに対応済み。
publicなオープンソースプロジェクトなら無料で使用できる。

Continuous Integration and Deployment service for Windows developers | AppVeyor