バックグラウンドスレッドでUI要素を作るともっと問題は深刻かもしれない。(WPF)

お久しぶりです。

ぐらばくさん(@Grabacr07)のブログ記事、バックグラウンド スレッドで UI 要素を作るとメモリリークする (WPF) | grabacr.nét が個人的に話題です。

この問題について、もうちょっと詳しく調べてみました。

続きを読む

ドラッグしてドロップ on WPF

勢い良く手を上げたはよいけど何を書けばよくわからなくなったXAML Advent Calendar 19日目を執筆させていただきます、かーのと申します。よろしくお願いします。

みなさん、XAMLライフ、満喫していますか!

XAML Advent Calendar ですが、ぼくはWPF以外ほとんど触ったことがないので
おもにWPFのお話をしていきます!

今日はWPFにおけるドラッグアンドドロップの実装について、です!

ドラッグアンドドロップの難しさ

ドラッグアンドドロップ、アイコンを移動させてゴミ箱へ投げたり、
要素を移動して並び替えたり、用途は様々。

しかし、いざ実装しようとするとこれがなかなか曲者です。
移動の検知は?移動先は?ドロップの可否は?ドロップ時の処理は?

というわけで、ドラッグアンドドロップの仕組みを見ながら、せっかくのXAMLなので、今回は
「ビヘイビアベース」でのドラッグアンドドロップの実装をしたいと思います。
そっちの方がMVVMと親和性高いしね!

続きを読む

Krile StarryEyes をリリースしました。

大変永らくお待たせしました。

本日 10/31 12:00(GMT)、Krile StarryEyesを一般公開しました。

http://krile.starwing.net/

フルスクラッチで開発された、Windows向けのフルスペック新世代Twitterクライアント(自称)です。

2.9.0ということで、まだプレビュー版です。バグがたくさん残っているとは思いますが、未実装項目もありますが、何卒よろしくお願いします。

続きを読む

Twitterでこの先生きのこるには – ふぁぼ爆撃の傾向と対策

.    _,,…,_
.  /_~,,..::: ~”‘ヽ
. (,,”ヾ  ii /^’,)
.    :i    i”
.    | (,,゚Д゚) < この記事は mikutter アドベントカレンダー 21日目の記事です。
.    |(ノ  |)
.    |    |
.    ヽ _ノ
.     U”U

今年も年の瀬が近づき、寒さが一層厳しくなってまいりました。それはさておき。

mikutter アドベントカレンダーについて名乗りを挙げたのですが、至らない私はなんとmikutterを使ったことがありません。仕方ないのでとしぁ氏に味噌カツをおごった時の話でもしようかと思ってたのですが、それはまたの機会に。

今回は、ふぁぼ爆撃のお話です。

続きを読む

Krileに求めたこと。求めること。

このブログに随時、Krileの開発時に考えたことや考えてることを書くようにしようかなーと思いました。Twitterとかで垂れ流してはいるんですが、流れて行ってしまうので、後からちゃんと見直すにはブログっていう形態がいいんじゃないかなとか思いまして。そういう思い付きですので続く保証はないですしきっと続きません。

最初は「Krileに求めること」を書きます。どんなことを考えて作ったか、作ってるか、という一番根本的なところです。ひょっとしたらもう二度と書かないかもしれないので、言いたいことを一番初めに書いておきたかったのです。あと、開発した後に思ったこととかも書きます。
続きを読む

Windows Phoneにおける高速なシリアライズについて。

多数のオブジェクトや複雑なオブジェクトをシリアライズ・デシリアライズする際は、パフォーマンスがネックとなります。デシリアライズ処理が速く終わればそれだけ速く操作可能になり、より良好なUXを提供できます。シリアライズ処理が長引くと10秒ルールに引っかかる恐れがあります。というわけで、WPで利用可能な(比較的)高速なシリアライズ手法について。

ただし、今回は時間の計測を行っていません、データどこかにやってしまった。。

see also: neue cc – .NET(C#)におけるシリアライザのパフォーマンス比較 http://neue.cc/2010/05/29_261.html
続きを読む

How to: Data Binding for ListPicker.SelectedItems

ListPicker.SelectedItems is a “IList” Property, so you must prepare the property typed “IList”, in your ViewModel.

Here is sample implementation::

in XAML:

        <toolkit:ListPicker Name="AccountListPicker"
                            Grid.ColumnSpan="2"
                            Margin="12,8"
                            ItemsSource="{Binding AuthInfos,
                                                  Mode=OneWay}"
                            SelectedItems="{Binding Selected,
                                                    Mode=TwoWay}"
                            SelectionMode="Multiple"
                            d:LayoutOverrides="Height" />

in ViewModel:

        private ObservableCollection _selected = new ObservableCollection();
        public IList Selected
        {
            get { return _selected; }
            set
            {
                if (_selected == value) return;
                _selected = new ObservableCollection();
                value.OfType().ForEach(a => _selected.Add(a));
                RaisePropertyChanged(() => Selected);
            }
        }

Additional: You should make sure that Collection have freezed which is binding in ItemsSource.

bad sample:

public IEnumerable ItemsSource
{
	// New instances are created every calling ItemsSource.
	get { return SomeModel.Query(); }
}

good sample:

private IEnumerable _itemsSource = SomeModel.Query().ToArray();
public IEnumerable ItemsSource
{
	get { return _itemsSource; }
}

Have fun with Silverlight WP! XD

MVVMでVMからCodeBehindに通知するとき

覚え書き。

ViewModelからCodeBehindへ通知するとき、つまりは通常バインドで解決されるようなルートにおいてCodeBehindのメソッドを呼び出したいとき。

VM(メッセージをRaise)→[メッセージ]→View(メッセージトリガ)→[CallMethodAction]→CodeBehind

とすれば動いてくれる。

単にCodeBehindにメソッド定義しておけばそれを呼べるので一番シンプル?