今回も悩んだ話。
たぶん自分で作ったプログラムとか慣れた人の場合ならつまづかないんだろうけど、
他人の作ったプログラムを見ていた時の話。
新しく作ったクラスに
DataTemplateでDataTypeとかちゃんと設定しているはずなのに
違うDataTemplateが適用されてしまうということがありました。
探し回ったら
ItemTemplateSelector
が別途設定されていました。。
2009年11月17日火曜日
2009年11月8日日曜日
Bindingがうまくいかなくてハマッタ話
ハマッタ話ばっかりですね。。(汗
今日も短いです。
Text="{Binding Path=DisplayString}"
として確実にDisplayStringがあるはずなのに表示されなかった事件!
ちゃんとイミディエイトウィンドウではobj.DisplayStringみたいにして見れるんです。
今回もすごく間抜けな原因で、
class XXX {
public string DisplayString;
}
としていました。
簡単ですね。
Binding は 『プロパティ』に対してしなければならないので
class XXX {
public string DisplayString {set; get;}
}
としただけで解決しました。
今日も短いです。
Text="{Binding Path=DisplayString}"
として確実にDisplayStringがあるはずなのに表示されなかった事件!
ちゃんとイミディエイトウィンドウではobj.DisplayStringみたいにして見れるんです。
今回もすごく間抜けな原因で、
class XXX {
public string DisplayString;
}
としていました。
簡単ですね。
Binding は 『プロパティ』に対してしなければならないので
class XXX {
public string DisplayString {set; get;}
}
としただけで解決しました。
2009年11月6日金曜日
2009年11月4日水曜日
Filter更新のタイミング
ListBoxなどのリストで表示したくないアイテムがあるときはFilterを使います。
ですが、Filterを後からかけ直す方法がわからずこの数日四苦八苦してました。
具体的には、
のときアイテムを非表示にするようなListboxで、
リストに追加するときの状態でフィルタがかかりますが、
すでに表示中のIsDisplayをfalseに書き換えても、
フィルタは再度かからないという状態でした。
解決方法は、
表示するアイテムをINotifyPropertyChangedにするなりして、
変更を検出できるようにする。
変更を検出したら
などで更新をしてやること。
でした。
スマートではないような気がしますが、一応解決ということで。
ですが、Filterを後からかけ直す方法がわからずこの数日四苦八苦してました。
具体的には、
IsDisplay == false;
のときアイテムを非表示にするようなListboxで、
リストに追加するときの状態でフィルタがかかりますが、
すでに表示中のIsDisplayをfalseに書き換えても、
フィルタは再度かからないという状態でした。
解決方法は、
表示するアイテムをINotifyPropertyChangedにするなりして、
変更を検出できるようにする。
変更を検出したら
CollectionViewSource.GetDefaultView(リストのインスタンス).Refresh();
などで更新をしてやること。
でした。
スマートではないような気がしますが、一応解決ということで。
登録:
投稿 (Atom)