C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: MVVMでTreeViewの選択したアイテムの取得


(過去ログ 67 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■38804 / inTopicNo.1)  MVVMでTreeViewの選択したアイテムの取得
  
□投稿者/ 倉田 有大 (684回)-(2009/07/25(Sat) 11:22:35)

分類:[.NET 全般] 

こんにちは、倉田 有大です。
TreeViewを継承したFLPTreeViewというカスタムコントロールを作成しました。

FilerView.xaml

<local2:FLPTreeView x:Name="flpTreeView" SusieCenterControl="{Binding SusieCenterControl}"
VisibleLibraryExtensions="{Binding VisibleLibraryExtensions}"
RootPath=""
/>

上記のように使用しているのですが、ツリービューのアイテムを選択した事をどうやって、ViewModelに通知すればよいでしょうか?
SelectedItemをバインディングしようとおもったら、依存プロパティーではなかったのでできませんでした。

最終手段としては、SelectedイベントからViewからViewModelにアクセスしようかと考えております。
引用返信 編集キー/
■38809 / inTopicNo.2)  Re[1]: MVVMでTreeViewの選択したアイテムの取得
□投稿者/ 倉田 有大 (686回)-(2009/07/25(Sat) 12:15:12)
MVVMの場合TreeViewItemのIsSelectedとバインディングするのが定石なんでしょうか?

この場合FLPTreeViewはカスタムコントロールですので、SelectedItemの依存プロパティー版をFLPTreeViewに実装しようかなと考え始めました。
引用返信 編集キー/
■38948 / inTopicNo.3)  Re[2]: MVVMでTreeViewの選択したアイテムの取得
□投稿者/ かずき (39回)-(2009/07/28(Tue) 10:25:08)
かずき さんの Web サイト
数日もんもんと考えてみました。

■倉田 有大 さん に返信
> SelectedItemをバインディングしようとおもったら、依存プロパティーではなかったのでできませんでした。
依存プロパティですが、読み取り専用のためBindingできないみたいですね。

> MVVMの場合TreeViewItemのIsSelectedとバインディングするのが定石なんでしょうか?
定石かどうかはわかりませんが、下記の記事では、TreeViewItemの要素1つに対応するViewModelを
定義しているみたいです。
http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

TreeViewItemのViewModelは下のようなinterfaceを持つように作っているので
TreeViewItemのIsSelectedとバインドするみたいです。
interface ITreeViewItemViewModel : INotifyPropertyChanged
{
    ObservableCollection<TreeViewItemViewModel> Children { get; }
    bool HasDummyChild { get; }
    bool IsExpanded { get; set; }
    bool IsSelected { get; set; }
    TreeViewItemViewModel Parent { get; }
}

> この場合FLPTreeViewはカスタムコントロールですので、SelectedItemの依存プロパティー版をFLPTreeViewに実装しようかなと考え始めました。
SelectedItemにデータがセットされた場合に
全てのTreeViewItemのIsSelectedをfalseにして、SelectedItemに対応する
TreeViewItemを取得して、IsSelectedをtrueにするという操作がいりそうかな?
(未確認です)

引用返信 編集キー/
■38993 / inTopicNo.4)  Re[3]: MVVMでTreeViewの選択したアイテムの取得
□投稿者/ 倉田 有大 (690回)-(2009/07/28(Tue) 22:41:31)
かずきさん、返信ありがとうございます。

>http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

ぐおう!ちょっとみましたが、これは時間をかけて読まないとわかりません!
今回は、選択しているツリービューのアイテムを取得したいだけなので、ここまでしなくてもいいかな?

それにしても、TreeViewItemのViewModelという発想が思いつきませんでした。
引用返信 編集キー/
■39011 / inTopicNo.5)  Re[4]: MVVMでTreeViewの選択したアイテムの取得
□投稿者/ かずき (40回)-(2009/07/29(Wed) 11:28:37)
かずき さんの Web サイト
No38993 (倉田 有大 さん) に返信
> それにしても、TreeViewItemのViewModelという発想が思いつきませんでした。

ListBoxとかListViewにデータを表示する際に、1行のデータに対応するViewModelとか
作ったりしてませんか?
それと同じだと思います。
 ListBoxの場合:ListBoxItemが1つの行なので、それに対応するViewModelがいるはず。

後は、選択項目が変わったときにコマンドを実行するような仕組みを用意して
CommandParameterにバインドしてViewModelに選択項目を渡すか・・・?かな。
CommandParameter="{Binding ElementName=treeViewの名前, Path=SelectedItem}"とかで
バインドできるといいなぁ(未確認)

まぁここらへん割り切りですね。
ViewからViewModelを触るのは、そんなにお作法違反というわけでもないでしょうし。
(個人的には、Bindingしかしちゃ駄目ってことはないと思ってます)
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -