WPF
2014〜2015年頃はWPFのMVVMを面白がっていたのだが、2022年の今となってはだるい。もっと言うとオワコン。 宣言的な書き方ができないし、バインディングの補完が効かない(できるのかな?) XAML側でバインディングを書く時に、脳内でこのパラメーターだよねっ…
印刷プリンタのコンボボックスを作っていて、その選択値を様々な画面で使い回したいのだが、非常にハマった。今も解決できない。 ViewModelBaseというクラスを作り、そのプロパティを継承したら行けるかと思ったが、ダメだった。ViewModelBaseのコンストラク…
死ぬほど重い腰を上げて、こちらにトライしてみた。そうはいっても、やることは単純だった。下記のUpgrade Assistantに沿って、Enterを叩きまくる簡単なお仕事。Enterを押す回数が多く、20回ぐらい押した。 dotnet.microsoft.com やってみた所、あっさり.net…
現象の説明はこちらに詳しい。 Decimal? とかでnull許容型にしているデータをTextBoxへバインドすると、入力値を消して空にしたときに、赤枠でエラーが出る。何か入力したあとにバックスペースで空文字にすると、空文字として扱われてしまうため、NULLに変換…
日本でWPFのPrismやってるの100人いるかどうかじゃないかな。なんでWindowsのデスクトップアプリなんか作ったんだろう。 Prism8が2020年の10月頃にリリースされ、破壊的変更が入った。ServiceLocatorがなくなってContainerLocatorに変わりました。それだけ言…
PrismのDialogServiceでDIしたViewModelに限って、毎回ViewModelのコンストラクタが呼ばれるという現象がありました。 prism:ViewModelLocator.AutoWireViewModel="True"にしているのにね。この設定にした場合、ViewModelのインスタンスはSingletonになって…
DataGridのSelectedItemsは、「System.Windows.Controls.SelectedItemCollection 」というクラスに値が保持されます。バインドされるオブジェクトが何が来るかわからないので、型はobject。これを任意の型のListにキャストする場合はこう書く。 this.DataGri…
WPFアプリ構築の敷居もグッと下がったと思う。このライブラリがMicrosoft標準でないというのが、WPFの悲劇なのでは。Prismを使ってWindowsのデスクトップアプリを作っているのですが、だいぶ慣れてきた。かずきさんのレポジトリを見て写経すればまずOK。MVVM…
aroundthedistance.hatenadiary.jpこれは、2016年になってから前職の内製したWindowsフォームの密結合過ぎるデスクトップアプリを、WPFで刷新している時に書いた記事です。画面がレスポンシブじゃないのを除けば別にWPFやる必要なくねって書いていました。で…
販売管理システムのデモを求められており、昔に作ってお蔵入りしたWPFベースのアプリを元にPrismを使って移植手術することにした。Windowsフォームで新しいアプリを作る気になれなかったし、WPFはMVVMと画面遷移がピタッとハマれば作りやすいと感じた。 オレ…
非常によくわかるお話だった。特にここ。kiwosuke.hatenablog.com MVVMの原則に従って一生懸命、コードビハインドからコードを追い出したところでほとんどメリットが感じられません。 業務系のアプリはデスクトップのテンキーをベースに操作ができることを求…
Programmer's Report: WPF で横長(Landscape)印刷をするを参考にしつつ。こんなコードで横向き出来ました。 var printQueue = new LocalPrintServer().GetPrintQueue( "YOUR PRINTER NAME"); PrintTicket ticket = printQueue.DefaultPrintTicket; ticket.Pa…
WPFでデスクトップアプリを作りまして、画面操作のテストが非常にめんどくさい。Seleniumに該当するものが無いかを簡単に調べてみた。大きく分けてこの3つがあるようだ。 UIAutomation Winium Friendly UIAutomationというのはMSが標準で用意している画面操…
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のビジュアルツリー…
弊社システムをご覧になった同業他社の社長さんが、非常に気に入って下さった。ずっとリニューアルしたいと思って時間を見つけてはちょいちょい作っていたリニューアル版を今月末に仕上げ、来年に導入予定です。上のボタン群の色味を悩んでいるんだけど、ど…
バインドしてる時にコンボボックスで空白の初期値を設定するには、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を帳票フレームワークとして使う - @kotyのブログにあるように、FixDocumentを作ってそこにPageをAddしてXPSに渡すっていう方法がある。これがとユーザーコントロールで帳票をデザイン出来るので、メリットが凄く大きい。が、実際印刷してみたらかなり重…
一番シンプルなのは、ここに記載されているこの方法でした。 Command実行時に、CommandParameterとしてWindowのインスタンスをViewModelへ 渡してあげれば良いのだ。目から鱗であった。ViewのXamlにおいて、View(Windowオブジェクト)のNameにMyWindowを設…
c#のDataBindingで必ずと言っていいほど使われる、ObservableCollectionというやつ。こいつはコレクション自体の変更を検知する仕組みはあるけど、そのコレクションに格納されているオブジェクトの変更までは検知されない。色々とStackOverFlowとかStackOver…
WindowsFormのDataGridViewだと、こんな感じで拾える。DataGridViewでセルが編集中の時にキーイベントを捕捉する: .NET Tips: C#, VB.NETにあるように、EditingControlShowingというイベントハンドラがあって、その中でDataGridTextBoxColumnの内部にあるTex…
一番簡単な方法はApp.xamlにViewModelをResource定義することです。これで同じプロジェクト内から触れます。すげー簡単でしょw
おおまかなアーキテクチャ設計は出来てきて、MVVMに乗っ取った仕組みでうまいことやろうとしています。で、業務系アプリはグリッド入力がUIの8割を占めるんですけど、組み方がWPFとWindows Formでは結構違うみたい。 セル内イベント捕捉 Windows Formの場合…
WPF(・∀・)イイネ!!って思う所書きます。 データバインディングすげー楽 WPFをやってみてこりゃいいと思ったのが、データバインディングの柔軟性でした。「ある値が入るとこっちの値が変わる」という依存性のあるデータの表示処理を、コードビハインド無しで出…
WPF 4 Unleashed作者: Adam Nathan出版社/メーカー: Sams発売日: 2010/06/04メディア: ペーパーバック購入: 3人 クリック: 13回この商品を含むブログ (4件) を見る上記を参考にしつつ。画像とかのバイナリデータをプロジェクト内に含み入れる時に、リソース…
WPF4 unleashedより、学んだことをメモ。 コードでバインドするパターン //FtreeはTreeViewで、CurrentFolderはTextBlock Binding b = new Binding(); b.Source = Ftree; b.Path = new PropertyPath("SelectedItem.Header"); CurrentFolder.SetBinding(TextB…
現在弊社内で動いている販売管理システムは、使い慣れたWindowsフォームで作りました。最たる理由はドットインパクトプリンタに印字命令を出せることで、ブラウザではその機能がないので、ネイティブなライブラリということで.NETを採用した、という感じ。で…