Visual Studio:WPFのxamlでProperties.Settings.Defaultの値をバインド

アブストラク

 Xamlから設定の値をバインドする方法のメモ。

 例えばテキストボックスのテキストなどを設定のstringへ保存しておけば、アプリケーションを再起動した際、終了直前に記入してあった文字を復元することができる。この時、バインドしておけば、WindowのClosingイベント時にアプリケーションの設定を保存するだけでよくなる。

方法

 雑にほかサイトのURLをコピペ。

 バインド方法は下記のサイトを参照

yoshinorin.net

 アプリケーションの設定については下記のサイトを参照

dobon.net

その他

 一応自分でもコードを記載しておく。以下ではテキストボックス(TextBox1)のテキストを設定のTextValue1にバインドする。

  1. ソリューションエクスプローラーのProperties -> 設定にアプリケーションのプロパティ設定を追加(名前はTextValue1、種類はstring、値は何でもよい)
  2. 名前空間を宣言

    xmlns:prop ="clr-namespace:アプリケーションのフォルダ名.Properties"
    

  3. バインド

    <TextBox
       Name="TextBox1"
       Text="{Binding Path=TextValue1, Source={x:Static prop:Settings.Default}}" />
    

  4. WindowのClosingイベントにSaveを追加。(保存のタイミングはいつでも良い)

    private void MainWindow_Closing(object sender, CancelEventArgs e)
    {
        Properties.Settings.Default.Save();
    }
    


Visual Studio:ソリューションやプロジェクトをコピーする方法

アブストラク

 Visual Studioのソリューションやプロジェクトをコピーして、別のアプリケーションとして開発を進めたい場合の手順についてのメモ。

 機能が少なく、追加nugetパッケージなどをすべて把握しているアプリケーションならば作り直すのもやぶさかではない。だが、よくわからないがネットの情報を読み漁りながら作っていたり、試行錯誤を繰り返した挙句できたがったものなどはそうもいかない。少なくとも自分はレベルが低く、日常的に開発しているわけでもない。アプリを作った際、たとえその時その場では内容を理解していたとしてもどうせすぐに忘れるし、もう一度ググったり思い出すのもめんどくさい。なので、よく使う機能を備えたものを派生させて使いたい場合なんかは、コピーして使いまわしたい。

 以下の変更を行うことでアプリを別物として開発を進めると気分がよい。

  • ソリューションファイルが含まれるフォルダをコピー
  • gitリポジトリが登録されている場合は削除
    隠しフォルダの.gitを削除したら(多分)消すことができる
  • ソリューション名やプロジェクト名を変更する

Gitの機能を使えばもっとスマートにいくのか?ということがよく分かっていない。

方法

 ソリューション名やプロジェクト名を変更する場合は以下のリンクを参考に。

www.atmarkit.co.jp

自分のために手順をまとめると、

  1. visual studioのソリューションエクスプローラー上から、ソリューション名とプロジェクト名を変更
  2. .csprojファイルが含まれるフォルダの名前を変更。さらに.slnファイルをメモ帳などで開き、csprojファイルが含まれるフォルダの名を、変更のパスとなるように修正して上書き保存
  3. 最後に、アセンブリ名や名前空間を変更する。ソリューションエクスプローラーのPropertiesをダブルクリックして表示したアプリケーションのプロパティから、アセンブリ名と既定の名前空間を新しい名前に変更。
  4. 検索と置換で古いアセンブリ名などを新しい名前置換する。対象をソリューション全体にして、すべ置換によって置き換える

以上でいったんデバッグを開始してみて、問題なく動いたらOK。

その他

 今回このメモを残すときにコピーしたプロジェクトは

  • MaterialDesing, MetroWindowを導入して見た目を調整済
  • RS232C通信の確立と任意コマンド送受信
  • タイマーイベントで通信により得られたデータ列のバッファリング
  • ChartControlを使ったリアルタイムグラフ描画(各軸の極限値の動的な変更など、簡単な機能をもつ)
  • 結果をエクセルファイルへ保存

といったもの。モニターとして使い勝手がよく、めっちゃ使う。何日も文句言わずに動いてくれるし。また、ドライバの駆動や、PIDによるフィードバック制御だったりは、これを発展させて簡単に作れるし。