掲示板お問い合わせランダムジャンプ



この広告は30日以上更新がないブログに表示されております。 新しい記事を書くことで広告を消すことができます。

Top Index

2014年06月22日
[WPF]ComboBoxのAutoComplete機能を添付プロパティで実装する
※2014/6/29追記
全角文字(IME変換)に対応していない問題を修正。

このエントリーをはてなブックマークに追加



背景


ComboBoxは単純なようで奥が深いのか、使いづらい。
Binding方法がSelectedValueと、SelectedItemの2つあるのがややこしい。

問題点の掘り下げ


SelectedValueとSelectedItemの特徴を列挙。
(だいたいあっているはず。間違ってたらすいません。)

まずは「SelectedValue」
・Integer、SelectedValueなどのリテラル型のBindingに向く
・ObjectのBingindには向かない
・Nothingの代入はできない
・ItemsSourceに存在しない場合、表示されない

次に「SelectedItem」
・ObjectのBingindに向く
・Nothingの代入はできない
・ItemsSourceに存在しない場合、表示されない
・だいたいの場合、IEquatableインターフェイスを実装して等価判定を行う必要あり


現状での回避策?


・Nothingの代入ができない
IsEditableにして、テキストを編集可能にしてやると解決。
文字列をすべて削除すればNothingになる。
ただし、ItemsSourceに存在しない値も指定できるようになってしまう。
(実際はItemsSourceに存在しなければNothingが代入されるのですが、画面上は入力した文字列が残るため、VMとVで情報の乖離が起きている。)

・ItemsSourceに存在しない場合、表示されない
VM側の値は存在しているが、表現できないので空欄になってるだけ。(VMとVで情報が乖離)
これはTextに現在値をOneWayでBindingすれば、VMとVの乖離が解消される。(OneWayがみそ)

しっくりこないからしっくりさせる


IsEditable=Trueを前提として、以下の点をしっくりさせる。

・Nothingも代入したい
Nothingを許容するかどうかは保存ボタンでやればいいから、ComboBoxoの範疇ではないとする。

・ItemsSourceに存在しない値は選択できない
いわゆるDropDownStyle。
ItemsSourceに存在しない値を指定された場合、Nothingにする。
もちろん、Textに残った残骸文字列もきれいにする。

・でも初期値ならいい
ややこしいので、デモGifで説明しますと、「Group z」というのはItemsSourceには存在しません。
でも、VM側で「Group z」を指定されてしまいました。
こういう場合に限り、ItemsSourceになくてもNothing化はしません。
ただし、一度でも値を変えると二度と「Group z」に戻すことはできません。

・選択候補を絞る
いわゆるオートコンプリート。
本題ではないのだけれど、IsEditableにしてしまったらまぁいるでしょうね。

・選択候補が1つの時にロストフォーカスしたら採用する
本題とずれてきてましたが、便利そうなのでそうします。

ソースコード(添付プロパティ以外)


要点だけピッキング。完全なものはダウンロードファイル参照。



ソースコード(添付プロパティ)


※添付プロパティのソースコード(完全)は長いからページの後半に付けてます。

続きを読む ...
 
[ 投稿者:mk3008 at 17:08 | WPF | コメント(0) | トラックバック(0) ]

2014年06月07日
リポジトリをClone、Fetchするバッチ
リポジトリをClone、Fetchするバッチのご紹介。
普通は「Pushを検知してFetch」するかと思いますが、
外部公開しているようなサーバーを持っていない場合はWebフックできません。
ということで、夜間バッチで定期的にFetchしてやろうって話。
ニッチだね。

バッチ用マシンの環境設定

・Git for windows
http://msysgit.github.io/
インストール時、
「Adjusting your PATH envirionment」画面にて
「Run Git from Windows Command Prompt」を選択することに注意。

・git-credential-winstore
https://gitcredentialstore.codeplex.com/
バッチ操作でユーザー認証を自動化するためのツール。(?)
正確な使い方がわかりませんが、とりあえず1回起動してください。
---------------------------
Installing git-credential-winstore
---------------------------
Do you want to install git-credential-winstore to prompt for passwords?
---------------------------
はい(Y) いいえ(N)
---------------------------
と出ますので「はい」を選択。

バッチファイルの作成



バッチファイルは特に変更する必要ないですが、
sync.bat6行目のsite変数のみ、ご自身の環境に合わせたサイトにしてください。
※環境がBacklogじゃない場合は適当にいじくりなおしてください。

主にメンテが必要なのは「sync_reps.txt」こっちです。
処理をリスト化したもので、第1引数がプロジェクト名、第2引数がリポジトリ名です。
リポジトリを追加したら行追加してください。

実行

sync_main.batを実行すれば、sync_reps.txtにあるリポジトリをFetchしてくれます。
ただ、初回実行時だけ、ユーザー認証ダイアログが出てきますのでそこだけ手作業。
以降はでてきません。
[ 投稿者:mk3008 at 21:09 | Git | コメント(0) | トラックバック(0) ]