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

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

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

Re[7]: コンボボックスにコレクションの中身を表示させたい


(過去ログ 90 を表示中)

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

■53606 / inTopicNo.1)  コンボボックスにコレクションの中身を表示させたい
  
□投稿者/ ゆずれもん (4回)-(2010/09/20(Mon) 19:36:14)

分類:[VB.NET/VB2005 以降] 

コンボボックスのItemsSourceにコレクションを設定し、Datatempleteにより、
コンボボックスの選択項目をborderとtextblockで表示しています。
コンボボックスの選択項目から1つ選択した際、コンボボックスにtextblock中の文字列が表示されるようにしたいのですが、
どのようにすればよいでしょうか?
よろしければアドバイス等お願い致します。

環境:Windows7,VisualStudio 2010,WPF
言語:VB

※言葉では説明がうまく出来なかった為、補足画像とソースを以下にアップロードしています。
http://www1.axfc.net/uploader/Sc/so/155152
PASS:[yuzu]
引用返信 編集キー/
■53611 / inTopicNo.2)  Re[1]: コンボボックスにコレクションの中身を表示させたい
□投稿者/ 囚人 (543回)-(2010/09/20(Mon) 21:06:49)
ComboBoxのDisplayMemberPathに表示したいプロパティを設定する、かな。
引用返信 編集キー/
■53613 / inTopicNo.3)  Re[2]: コンボボックスにコレクションの中身を表示させたい
□投稿者/ Hongliang (712回)-(2010/09/20(Mon) 22:04:08)
DataTemplate 使ってるなら、DataTemplate 内の TextBlock の Text に Binding を設定ですね。
<TextBlock Text="{Binding プロパティ名}"/>
引用返信 編集キー/
■53675 / inTopicNo.4)  Re[3]: コンボボックスにコレクションの中身を表示させたい
□投稿者/ ゆずれもん (5回)-(2010/09/23(Thu) 19:03:50)
お二方、アドバイスありがとうございます。

まずDisplayMemberPathプロパティについて調べたのですが、
これを用いるとデータテンプレートで定義した内容が反映されなくなってしまうような為、
私が調べた限りではこの方法ではうまくいかなかったです。
ですが、DisplayMemberPathプロパティの存在を知らなかったので、勉強になりました。

Bindingについてですが、現状でもDatatemplateで、TextBlockのTextに
バインディングを設定しています。
恐らくこのテキストブロックをボーダーで囲っている(?)為、
素直にいかないような気がしています……。

引き続き、アドバイス等あればよろしくお願い致します。
足りない情報等ある場合、ご指摘頂けると幸いです。
引用返信 編集キー/
■53676 / inTopicNo.5)  Re[4]: コンボボックスにコレクションの中身を表示させたい
□投稿者/ Hongliang (715回)-(2010/09/23(Thu) 19:18:42)
> 恐らくこのテキストブロックをボーダーで囲っている(?)為、
> 素直にいかないような気がしています……。
関係ありません。
// Border.DataContext を明示的に設定してるなら別ですが。

ItemsSource にバインディングしてるオブジェクト、DataTemplate の記述辺りが欲しいですね。
引用返信 編集キー/
■53682 / inTopicNo.6)  Re[5]: コンボボックスにコレクションの中身を表示させたい
□投稿者/ ゆずれもん (6回)-(2010/09/23(Thu) 23:21:34)
ItemsSourceにはObservableCollectionkクラスを継承したクラスをバインディングしています。

Public Class NameList
Inherits ObservableCollection(Of PersonName)

' Methods
Public Sub New()
MyBase.Add(New PersonName("Willa", "Cather", Brushes.Black))
MyBase.Add(New PersonName("Isak", "Dinesen", Brushes.Black))
MyBase.Add(New PersonName("Victor", "Hugo", Brushes.Black))
MyBase.Add(New PersonName("Jules", "Verne", Brushes.Red))
End Sub
End Class

※PersonNameは、単純に3つのプロパティ(FirstName,LastName,GeneralVariable)からなるクラスです。


Datatemplateには、テキストブロックのテキストプロパティを以下のように記述しています。

textBlockFactory.SetBinding(TextBlock.TextProperty, New Binding("LastName"))

※ItemsSourceの指定はXAMLに記述していますが、Datatemplateの記述等は
 コードで行いたいと考えています。

ソースを全て載せてよいのか分らなかった為、一部だけ抜粋しています。
すべてのソースは、一番最初の書き込みにあるURLからダウンロード出来ます。
お手数ですが、アドバイス等お願い致します。
引用返信 編集キー/
■53683 / inTopicNo.7)  Re[6]: コンボボックスにコレクションの中身を表示させたい
□投稿者/ Hongliang (716回)-(2010/09/24(Fri) 03:13:37)
XamlWriter で出力してみて確認するとか。
というか、取り敢えず XAML で ItemTemplate 書いてみたらどうでしょう。
引用返信 編集キー/
■53752 / inTopicNo.8)  Re[7]: コンボボックスにコレクションの中身を表示させたい
□投稿者/ ゆずれもん (7回)-(2010/09/26(Sun) 11:15:06)
アドバイスありがとうございます。
もう少し自分で頑張ってみようと思います。
期待する動作となった際には、またここに書き込ませて頂きたいと思います。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -