Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

WPF

モダン・フロントエンドに慣れるとWPFクソだるい

WPF

2014〜2015年頃はWPFのMVVMを面白がっていたのだが、2022年の今となってはだるい。もっと言うとオワコン。 宣言的な書き方ができないし、バインディングの補完が効かない(できるのかな?) XAML側でバインディングを書く時に、脳内でこのパラメーターだよねっ…

WPFでコンボボックスの選択値が共有できない

WPF

印刷プリンタのコンボボックスを作っていて、その選択値を様々な画面で使い回したいのだが、非常にハマった。今も解決できない。 ViewModelBaseというクラスを作り、そのプロパティを継承したら行けるかと思ったが、ダメだった。ViewModelBaseのコンストラク…

.NET Framework 4.8 → .NET 6 へ移行作業にトライ

死ぬほど重い腰を上げて、こちらにトライしてみた。そうはいっても、やることは単純だった。下記のUpgrade Assistantに沿って、Enterを叩きまくる簡単なお仕事。Enterを押す回数が多く、20回ぐらい押した。 dotnet.microsoft.com やってみた所、あっさり.net…

数値をバインドしてるTextBoxの入力値が空になるとエラーになる

WPF

現象の説明はこちらに詳しい。 Decimal? とかでnull許容型にしているデータをTextBoxへバインドすると、入力値を消して空にしたときに、赤枠でエラーが出る。何か入力したあとにバックスペースで空文字にすると、空文字として扱われてしまうため、NULLに変換…

Prism8のContainerLocatorへの対応

日本でWPFのPrismやってるの100人いるかどうかじゃないかな。なんでWindowsのデスクトップアプリなんか作ったんだろう。 Prism8が2020年の10月頃にリリースされ、破壊的変更が入った。ServiceLocatorがなくなってContainerLocatorに変わりました。それだけ言…

PrismのDialogServiceでDIしたViewModelが毎回初期化される

WPF

PrismのDialogServiceでDIしたViewModelに限って、毎回ViewModelのコンストラクタが呼ばれるという現象がありました。 prism:ViewModelLocator.AutoWireViewModel="True"にしているのにね。この設定にした場合、ViewModelのインスタンスはSingletonになって…

DataGridのSelectedItemsを任意のListにキャストする

WPF

DataGridのSelectedItemsは、「System.Windows.Controls.SelectedItemCollection 」というクラスに値が保持されます。バインドされるオブジェクトが何が来るかわからないので、型はobject。これを任意の型のListにキャストする場合はこう書く。 this.DataGri…

Prismに慣れてきた。これがMS標準だったらなぁ・・・

WPFアプリ構築の敷居もグッと下がったと思う。このライブラリがMicrosoft標準でないというのが、WPFの悲劇なのでは。Prismを使ってWindowsのデスクトップアプリを作っているのですが、だいぶ慣れてきた。かずきさんのレポジトリを見て写経すればまずOK。MVVM…

デスクトップアプリは、一周回ってWPFでいいじゃんと思った話

WPF

aroundthedistance.hatenadiary.jpこれは、2016年になってから前職の内製したWindowsフォームの密結合過ぎるデスクトップアプリを、WPFで刷新している時に書いた記事です。画面がレスポンシブじゃないのを除けば別にWPFやる必要なくねって書いていました。で…

WPF with Prism6に挑戦

WPF

販売管理システムのデモを求められており、昔に作ってお蔵入りしたWPFベースのアプリを元にPrismを使って移植手術することにした。Windowsフォームで新しいアプリを作る気になれなかったし、WPFはMVVMと画面遷移がピタッとハマれば作りやすいと感じた。 オレ…

業務系アプリでWPFを使うメリットがなかった件

非常によくわかるお話だった。特にここ。kiwosuke.hatenablog.com MVVMの原則に従って一生懸命、コードビハインドからコードを追い出したところでほとんどメリットが感じられません。 業務系のアプリはデスクトップのテンキーをベースに操作ができることを求…

WPFのXPSDocumentの横向き印字

Programmer's Report: WPF で横長(Landscape)印刷をするを参考にしつつ。こんなコードで横向き出来ました。 var printQueue = new LocalPrintServer().GetPrintQueue( "YOUR PRINTER NAME"); PrintTicket ticket = printQueue.DefaultPrintTicket; ticket.Pa…

Windowsアプリの自動テストはFriendlyが良さげ

WPFでデスクトップアプリを作りまして、画面操作のテストが非常にめんどくさい。Seleniumに該当するものが無いかを簡単に調べてみた。大きく分けてこの3つがあるようだ。 UIAutomation Winium Friendly UIAutomationというのはMSが標準で用意している画面操…

DataGridのContextMenuでUIElementが取得できない問題

stackoverflow.com The ContextMenu isn't in the same part of the Visual Tree so that's why you can't use ElementName etc. to reference the DataGrid. You'll have to use PlacementTarget of the ContextMenu instead. WPFのXAMLのビジュアルツリー…

WPFで販売管理システムを作るぞ

WPF

弊社システムをご覧になった同業他社の社長さんが、非常に気に入って下さった。ずっとリニューアルしたいと思って時間を見つけてはちょいちょい作っていたリニューアル版を今月末に仕上げ、来年に導入予定です。上のボタン群の色味を悩んでいるんだけど、ど…

WPFのComboBoxに空白値を設定する方法

WPF

バインドしてる時にコンボボックスで空白の初期値を設定するには、SelectedItemの値をNullにすると勝手に追加されるようです。 <ComboBox MinWidth="50" ItemsSource="{Binding SaleTypeList}" SelectedItem="{Binding SaleType}" DisplayMemberPath="Name"/> SaleTypeListはこんな感じのListです。 SaleTypeList.Add(new{ Name = "掛売", Value = "0" }); SaleTypeList.Add(new{ Name = </combobox>…

WPFにおける印刷方法

WPF

WPFを帳票フレームワークとして使う - @kotyのブログにあるように、FixDocumentを作ってそこにPageをAddしてXPSに渡すっていう方法がある。これがとユーザーコントロールで帳票をデザイン出来るので、メリットが凄く大きい。が、実際印刷してみたらかなり重…

ViewModelのコマンドでViewを操作する方法

WPF

一番シンプルなのは、ここに記載されているこの方法でした。 Command実行時に、CommandParameterとしてWindowのインスタンスをViewModelへ 渡してあげれば良いのだ。目から鱗であった。ViewのXamlにおいて、View(Windowオブジェクト)のNameにMyWindowを設…

ObservableCollectionの中身が変更されたことを検知する方法

WPF

c#のDataBindingで必ずと言っていいほど使われる、ObservableCollectionというやつ。こいつはコレクション自体の変更を検知する仕組みはあるけど、そのコレクションに格納されているオブジェクトの変更までは検知されない。色々とStackOverFlowとかStackOver…

WPF DataGridで編集中のセルの値を拾う方法を考える

WindowsFormのDataGridViewだと、こんな感じで拾える。DataGridViewでセルが編集中の時にキーイベントを捕捉する: .NET Tips: C#, VB.NETにあるように、EditingControlShowingというイベントハンドラがあって、その中でDataGridTextBoxColumnの内部にあるTex…

WPFでユーザーコントロールからViewModelを参照する方法

一番簡単な方法はApp.xamlにViewModelをResource定義することです。これで同じプロジェクト内から触れます。すげー簡単でしょw

WPF DataGrid VS Windows Form DataGridView

おおまかなアーキテクチャ設計は出来てきて、MVVMに乗っ取った仕組みでうまいことやろうとしています。で、業務系アプリはグリッド入力がUIの8割を占めるんですけど、組み方がWPFとWindows Formでは結構違うみたい。 セル内イベント捕捉 Windows Formの場合…

もう僕はWindowsフォームに戻れない

WPF(・∀・)イイネ!!って思う所書きます。 データバインディングすげー楽 WPFをやってみてこりゃいいと思ったのが、データバインディングの柔軟性でした。「ある値が入るとこっちの値が変わる」という依存性のあるデータの表示処理を、コードビハインド無しで出…

WPFのResourceについて簡単にまとめてみた

WPF

WPF 4 Unleashed作者: Adam Nathan出版社/メーカー: Sams発売日: 2010/06/04メディア: ペーパーバック購入: 3人 クリック: 13回この商品を含むブログ (4件) を見る上記を参考にしつつ。画像とかのバイナリデータをプロジェクト内に含み入れる時に、リソース…

WPFのデータバインディング学習メモ

WPF

WPF4 unleashedより、学んだことをメモ。 コードでバインドするパターン //FtreeはTreeViewで、CurrentFolderはTextBlock Binding b = new Binding(); b.Source = Ftree; b.Path = new PropertyPath("SelectedItem.Header"); CurrentFolder.SetBinding(TextB…

WPFのデータバインディングの基礎を学ぶ

現在弊社内で動いている販売管理システムは、使い慣れたWindowsフォームで作りました。最たる理由はドットインパクトプリンタに印字命令を出せることで、ブラウザではその機能がないので、ネイティブなライブラリということで.NETを採用した、という感じ。で…