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

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

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

Re[7]: 【WPF】TreeViewの制御について


(過去ログ 78 を表示中)

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

■46464 / inTopicNo.1)  【WPF】TreeViewの制御について
  
□投稿者/ anjyu (1回)-(2010/02/03(Wed) 12:49:36)

分類:[.NET 全般] 

お世話になります。

WPFでのチェックボックス付TreeViewの制御について、
行き詰っておりますのでお力をお貸し下さい。

やりたいことは、親がチェックされたら子以下の階層もチェックする。
子のチェックが解除されたら親のチェックも解除する、という処理です。
親チェック時に子をチェックする、というのはできたのですが、
子解除時に親を解除する方法が分かりません・・・
よろしくお願い致します。
引用返信 編集キー/
■46465 / inTopicNo.2)  Re[1]: 【WPF】TreeViewの制御について
□投稿者/ Hongliang (552回)-(2010/02/03(Wed) 12:57:15)
ItemsSource や HierarchicalDataTemplate を使っていますか?
> 親チェック時に子をチェックする、というのはできたのですが、
はどのように実装されましたか?
引用返信 編集キー/
■46466 / inTopicNo.3)  Re[2]: 【WPF】TreeViewの制御について
□投稿者/ anjyu (3回)-(2010/02/03(Wed) 13:01:55)
No46465 (Hongliang さん) に返信
> ItemsSource や HierarchicalDataTemplate を使っていますか?
>>親チェック時に子をチェックする、というのはできたのですが、
> はどのように実装されましたか?

チェックボックスに「IsChecked="{Binding SelectFlg, Mode=TwoWay}"」を持たせ、
INotifyPropertyChangedにて
public bool SelectFlg
{
get { return this.selectflg; }
set
{
this.selectflg = value;
NotifyPropertyChanged("SelectFlg");
}
}

private void NotifyPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
if (propertyName == "SelectFlg")
{
foreach (ThemaData child in this.ChildThemaData)
{
child.SelectFlg = this.SelectFlg;
}
}
}
というように親のチェックと同様に子のチェックも変更しました。
引用返信 編集キー/
■46470 / inTopicNo.4)  Re[3]: 【WPF】TreeViewの制御について
□投稿者/ 中博俊 (1345回)-(2010/02/03(Wed) 13:20:08)
parentもたせてparentのチェックメソッド呼んで
parentが配下の者すべてがチェック状態ならtrue, すべてアンチェックならfalse、そうじゃないならnullて感じでいいんじゃないですか?

引用返信 編集キー/
■46480 / inTopicNo.5)  Re[4]: 【WPF】TreeViewの制御について
□投稿者/ anjyu (5回)-(2010/02/03(Wed) 15:50:48)
No46470 (中博俊 さん) に返信
> parentもたせてparentのチェックメソッド呼んで
> parentが配下の者すべてがチェック状態ならtrue, すべてアンチェックならfalse、そうじゃないならnullて感じでいいんじゃないですか?
>

おかげさまで、parent配下がすべてチェック状態の場合と
parent配下がすべてアンチェック状態の処理はできました。
が、それ以外の処理が分かりません・・・。
たとえば、
□1
□1-1
□1-1-1
□1-1-2
□1-1-3
□1-2
□1-2-1
□1-2-2
□1-2-3
とあるときに、
まず1をチェックし、子階層を全てチェック状態にしたあとで
1-1-1のチェックを外したとします。
するとparentチェックでnullがかえってきますが、
この時に1-1のチェックを外すにはどうしたらいいでしょうか?
現状、1-1のチェックが外れた場合、1-1の子階層である1-1-1、1-1-2、1-1-3のチェックもはずれるようになってしまっています・・・
初歩的な質問で申し訳ありませんが、よろしくお願い致します。

引用返信 編集キー/
■46481 / inTopicNo.6)  Re[5]: 【WPF】TreeViewの制御について
□投稿者/ Hongliang (553回)-(2010/02/03(Wed) 16:38:15)
> まず1をチェックし、子階層を全てチェック状態にしたあとで
> 1-1-1のチェックを外したとします。
> この時に1-1のチェックを外すにはどうしたらいいでしょうか?

子の一つでもチェックが外れたら親のチェックが外れるんですか?
で、親のチェックが外れたら全ての子はチェックが外れるんですか?
// これって結局 TreeView 全体で一つのチェック状態しか持てないような。

一般的には three-state なチェック状態を使って管理するのがよくある方法だと思いますが……。

> するとparentチェックでnullがかえってきますが、

parent チェックで null って、parent が null ってことですか?
それは単に設定忘れってだけでは?
一度ツリーを作ったら、そのノードを移動させない限り親は変わらないでしょう。
引用返信 編集キー/
■46487 / inTopicNo.7)  Re[6]: 【WPF】TreeViewの制御について
□投稿者/ 中博俊 (1346回)-(2010/02/03(Wed) 19:18:39)
>>そうじゃないならnull

が3ステートの意味ってわかってなかったかな?
配下のチェックがONとOFFがいるとき親はグレーだったり、塗りつぶしだったりになりますよね。
そういう感じの表現をしてあげればいいと思います。

引用返信 編集キー/
■46516 / inTopicNo.8)  Re[7]: 【WPF】TreeViewの制御について
□投稿者/ anjyu (6回)-(2010/02/04(Thu) 12:02:41)
解決しました。
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -