今回のは単純すぎというかまぬけすぎて書くかどうか迷ったのですが、
Listboxでたとえば3つのアイテムA,B,Cがあって、
ふつうはA選択中にBをクリックするとBが選択される。
今回の失態は、A選択中にBをクリックするとA,Bが選択状態になる、というもの。
SelectionModeとか余計なものが頭をよぎったのですぐにわからなかったのですが、
単純にoverrideしたEqualsが誤ってA==Bとなるようになっていたのでした。。
2009年11月4日水曜日
Filter更新のタイミング
ListBoxなどのリストで表示したくないアイテムがあるときはFilterを使います。
ですが、Filterを後からかけ直す方法がわからずこの数日四苦八苦してました。
具体的には、
のときアイテムを非表示にするようなListboxで、
リストに追加するときの状態でフィルタがかかりますが、
すでに表示中のIsDisplayをfalseに書き換えても、
フィルタは再度かからないという状態でした。
解決方法は、
表示するアイテムをINotifyPropertyChangedにするなりして、
変更を検出できるようにする。
変更を検出したら
などで更新をしてやること。
でした。
スマートではないような気がしますが、一応解決ということで。
ですが、Filterを後からかけ直す方法がわからずこの数日四苦八苦してました。
具体的には、
IsDisplay == false;
のときアイテムを非表示にするようなListboxで、
リストに追加するときの状態でフィルタがかかりますが、
すでに表示中のIsDisplayをfalseに書き換えても、
フィルタは再度かからないという状態でした。
解決方法は、
表示するアイテムをINotifyPropertyChangedにするなりして、
変更を検出できるようにする。
変更を検出したら
CollectionViewSource.GetDefaultView(リストのインスタンス).Refresh();
などで更新をしてやること。
でした。
スマートではないような気がしますが、一応解決ということで。
2009年10月26日月曜日
ApplicationDefinition 要素を指定できません。エラー
今日はこのエラーに2時間くらい悩まされました。。(汗
で、見つけたのがこのQ&A。
簡単に書くと、
1.WPFアプリをライブラリに変更した後にapp.xamlやapp.xaml.csが残っていたらおかしくなるぜー
のケースと
2.ファイルをコピペしたらビルドアクションがおかしくなるぜー。xamlファイルを右クリックしてビルドアクションプロパティをApplicationDefinitionからPageにかえな!
のパターンみたいです。
わたしの場合は2で、さらにpngのビルドアクションはResourceからPageに勝手に変わっていたので
全部Resourceに直しました。
C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.WinFX.targets(294,9): error MC1002: ライブラリ プロジェクト ファイルは、ApplicationDefinition 要素を指定できません。
C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.WinFX.targets(294,9): error BG1003: プロジェクト ファイルに、無効なプロパティ値が含まれています。
で、見つけたのがこのQ&A。
簡単に書くと、
1.WPFアプリをライブラリに変更した後にapp.xamlやapp.xaml.csが残っていたらおかしくなるぜー
のケースと
2.ファイルをコピペしたらビルドアクションがおかしくなるぜー。xamlファイルを右クリックしてビルドアクションプロパティをApplicationDefinitionからPageにかえな!
のパターンみたいです。
わたしの場合は2で、さらにpngのビルドアクションはResourceからPageに勝手に変わっていたので
全部Resourceに直しました。
2009年10月20日火曜日
Bindingが反映されなくてではまった話
TextBoxをおいてTextプロパティを適当にバインディングしたのに反映されない、
Source→Targetにも、逆にも、まったく反映されないということで今日結構な時間つまっていました。
まぁこれも解決してしまえば簡単な話で、
TextBoxにTemplate="{StaticResource ~~~
なんて余計なものを書いているのを忘れて、実際にはTemplateのなかのものが表示されている
(もちろんTemplateは適切に作れていない)というだけでした。
最近こういう間抜けな話だけのブログになりつつあるな。。
Source→Targetにも、逆にも、まったく反映されないということで今日結構な時間つまっていました。
まぁこれも解決してしまえば簡単な話で、
TextBoxにTemplate="{StaticResource ~~~
なんて余計なものを書いているのを忘れて、実際にはTemplateのなかのものが表示されている
(もちろんTemplateは適切に作れていない)というだけでした。
最近こういう間抜けな話だけのブログになりつつあるな。。
便利:メソッドスタブの作成
いや、もうたぶん常識なのでしょうけど。。
今までユニットテストを作成するとき、ずっと
1.対象のクラスVMをクラスだけ作成
2.VMをテストするVMTestクラスを作成
3.VMクラスに空のメソッドFix()を作成
のように表示され、もちろんまだ存在しないFix()メソッドは警告の波線がついているわけですが、
今までユニットテストを作成するとき、ずっと
1.対象のクラスVMをクラスだけ作成
2.VMをテストするVMTestクラスを作成
3.VMクラスに空のメソッドFix()を作成
4.VMTestクラスにFix()をテストするコードを記述
5.VMのFix()の中身を実装
6.メソッドごとに3~5を繰り返し
のようにやっていました。
結構空のスケルトンを作るためだけに
テスト対象の本物のクラスに戻るのがめんどくさかったんですけど、(3のところ)
テストクラスの方でメソッドを作ったときに
のように表示され、もちろんまだ存在しないFix()メソッドは警告の波線がついているわけですが、
ここでメソッド名の下の青い四角を押すと
のようになんと(VMクラスに移動することなく、)スタブをその場で作成することができます。
これでクラスを移動する回数がかなり減りました!
きっと常識なんだよね。。。
小さな発見でしたが、大きな効率化になりそうです♪
2009年10月18日日曜日
ClassInitialize()で実行時エラー
Windows7とVisual Studio2010に環境移行したので、前回の日記から間が開きました。
テスト環境もNUnitからVS2010のUnitTestFrameworkに移行しようとしました。
で、VSで単体テストクラスのスケルトンをはいて実行したところ、
メソッド (プロジェクト名).(クラス名).MyClassInitialize は不適切なシグネチャを含んでいます。パラメーター 1 は型 Microsoft.VisualStudio.TestTools.UnitTesting.TestContext でなければなりません。
と。
コードを何度見直しても間違いはない。というかスケルトンからシグネチャは変更していない。
で、ネットで検索したらこういう記事が。
http://social.msdn.microsoft.com/Forums/en-CA/vcsharp2008prerelease/thread/33febac0-4073-4d49-8b68-db0ca1255cd2
私の場合逆にVisual Studio 10.0フォルダのdllに変更したら直ったようなのですが。
ちなみに対象のフレームワークが.Net Framework 3.5用(←4.0ではなくて)のプロジェクトをさわっていたので、
そのためにUnitTestFrameworkのdllも古いのが読まれてしまったのかもしれません。。
テスト環境もNUnitからVS2010のUnitTestFrameworkに移行しようとしました。
で、VSで単体テストクラスのスケルトンをはいて実行したところ、
メソッド (プロジェクト名).(クラス名).MyClassInitialize は不適切なシグネチャを含んでいます。パラメーター 1 は型 Microsoft.VisualStudio.TestTools.UnitTesting.TestContext でなければなりません。
と。
コードを何度見直しても間違いはない。というかスケルトンからシグネチャは変更していない。
で、ネットで検索したらこういう記事が。
http://social.msdn.microsoft.com/Forums/en-CA/vcsharp2008prerelease/thread/33febac0-4073-4d49-8b68-db0ca1255cd2
私の場合逆にVisual Studio 10.0フォルダのdllに変更したら直ったようなのですが。
ちなみに対象のフレームワークが.Net Framework 3.5用(←4.0ではなくて)のプロジェクトをさわっていたので、
そのためにUnitTestFrameworkのdllも古いのが読まれてしまったのかもしれません。。
登録:
投稿 (Atom)

