🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

バインド

バインドは、一定の方法で複数の事柄が関連付けられている状態を呼びます。また、そのような関連付けを実行する機能自体を指す事もあります。

Q&A

解決済

1回答

380閲覧

【C#:デスクトップアプリ】xamlファイルの「ItemSource="{Binding}"」について

daityan

総合スコア9

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

バインド

バインドは、一定の方法で複数の事柄が関連付けられている状態を呼びます。また、そのような関連付けを実行する機能自体を指す事もあります。

0グッド

0クリップ

投稿2023/12/06 09:15

編集2023/12/06 11:39

実現したいこと

  • comboboxの属性として「ItemSource="{Binding}"」と記載されているのですが、ネットで調べると

"{Binding XXX}"のように記載する方法しか見つかりませんでした。
"{Binding}"のように「XXX」部分(選択肢の値を示す変数)がない形の記載もできるのでしょうか?
また、"{Binding}"のように記載する方法では、選択肢は一般的にどこで定義されるものなのでしょうか?

補足

ほかの方が作成したC#のプログラムの処理内容を確認しているのですが(私はC#の初心者です)
comboboxの属性として「ItemSource="{Binding}"」と記載されております。
アプリをデバッグしたときに表示された選択肢の値で、ソリューションフォルダ内をGrep(サクラエディタ)してみたのですがGrepには1件もヒットせず、選択肢が定義されているファイルを見つけることができませんでした。

些細なことでもご意見いただけると大変助かります(>_<)
何卒宜しくお願いいたします。

<Combobox Name="XXXXX" ItemSource="{Binding}" ・・・・ のように記載されております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2023/12/06 09:39

この質問を閲覧した人には、現在の記載内容では判断つかないと思いますよ。たくさんやり方があります。C#の問題というよりはWPFのXAML、データバインディングに関係することで、ItemSourceに動的に値をセットしている場合、固定値でファイルに書かれているとは限りません。 「WPF ComboBox ItemSource データバインディング」などで検索してみて、基本的な部分を学んでみてからの方が理解は早いし、質問のポイントも絞れてくるかあるいは自分で解決できるようになると思います。
TN8001

2023/12/06 10:32

これだけの情報ではdodox86さんの言う通り一般的な事柄しか答えられません。 少なくともツリー構造が分かるWindow.xamlとWindow.xaml.cs・ViewModel.csが必要です。 以下一般的な事柄 xamlを使用する「デスクトップアプリ」はWPFやUWP等複数あります(共通する事柄も多いですが) "{Binding}"とした場合そのコントロールのDataContext自体にバインドします。 そのコントロールのDataContextがなんなのかは、その上(ツリーの上位)のxamlがどうなっているかによります。 通常ItemsSourceに設定するものは配列やList・Dictionaryぐらいですが、必ずしもstringとは限りません。 クラスが入っている場合もあります。そうなるとC#コード上では単純に { "aa", "bb", } のようにわかりやすく並んでない可能性があります。 SelectedValuePathやDisplayMemberPathも設定されていますか? DataContextChangedイベントを設定して、e.NewValueで型や中身を確認してみてください。 バインディングやDataContextに関して不慣れであれば、ざっと目を通しておいてください。 [wpf binding - Google 検索](https://www.google.co.jp/search?q=wpf+binding&lr=lang_ja) [wpf datacontext - Google 検索](https://www.google.co.jp/search?q=wpf+datacontext&lr=lang_ja)
daityan

2023/12/06 11:40

dodox86さん コメントいただき誠にありがとうございます。 大変失礼いたしました。 理解および質問内容の記載が不十分でした。 (質問内容を少し修正いたしました。まだ質問内容が明確になっておりませんので、理解を深めるためにcomboboxやdatacontextについて勉強します)
daityan

2023/12/06 11:40

TN8001さん コメントいただき誠にありがとうございます。 "{Binding XXX}"のように記載しないといけないのでは?と思っていたのですが、 "{Binding}"の記載の方法もあるのですね。 大変勉強になります。「DataContext」については知らなかったので勉強してみます。 行き詰まっているところ、ヒントをいただけて大変助かりました。本当にありがとうございます。
TN8001

2023/12/06 13:24 編集

> "{Binding XXX}"のように記載しないといけないのでは?と思っていたのですが、 > "{Binding}"の記載の方法もあるのですね。 はい。 ただComboBoxのItemSourceに"{Binding}"を使うのは、「そうそうないなぁ」という気はします。 「ItemSource="{Binding}"」 11件(すべてPropertyGrid相手) [Code search results](https://github.com/search?q=ItemSource%3D%22%7BBinding%7D%22+language%3AXML&type=code) 「ItemSource="{Binding」 408件(思ったより少ないな) [Code search results](https://github.com/search?q=ItemSource%3D%22%7BBinding+language%3AXML&type=code) Content="{Binding}" という使い方は頻出します。 「Content="{Binding}"」 6k件(これはやけに多いな^^; [Code search results](https://github.com/search?q=Content%3D%22%7BBinding%7D%22+language%3AXML&type=code) データベースから取得した値やWeb APIから取得した値等、プログラム外から来たものという可能性はないですか? 「"選択肢" + 1」等「"選択肢1"」では引っかからないような作り方をしているとか? あるいはリソースに定義しているとか?(すべてのファイルでgrepなら引っかかるかな??) 意地悪な方法はいくらでもあるでしょうけど、わざわざそんなことしないですよねぇ?w > 行き詰まっているところ、ヒントをいただけて大変助かりました。本当にありがとうございます。 調べてみて自力で解決できたなら「自己解決」として質問を「解決済」にしてください。 [ヘルプ|質問をした後に自己解決してしまった](https://teratail.com/help#resolve-myself) そうでないなら質問に情報を追記してください。
daityan

2023/12/07 04:33

TN8001さん 大変お世話になっております。 コメントいただき誠にありがとうございます。 教えていただいことを元に勉強し、再度確認してみたところ、 おそらくなのですが、C#のコードの中でデータべースから取得した値の一覧をcomboboxのItemSourceに設定しているようでした。(おそらくですが(笑)) ■補足 AAAA.xamlファイル  →<ComboBox Name="test" ItemSource="{Binding}" ・・・のように記載されているファイル AAAA.xaml.csファイル →ファイル名と同じメソッド(おそらく初期化時に起動するのかと思っています)にて   データベースから値を取得した後に、それを下記のようにして設定している箇所がありました。   this.test.ItemSource = (データベースから取得した値を格納したリスト) comboboxの親はGrid(その親もGrid)になってるのですが、Gridのdatacontextに値が設定されてる箇所はなさそうでした(私の理解不足で単に見つけられていない可能性はありますが(汗)) TN8001さんのおかげでWPFへの理解が少し深まりました。本当に助かりました。 感謝です、ありがとうございました!
TN8001

2023/12/07 05:20 編集

> ファイル名と同じメソッド(おそらく初期化時に起動するのかと思っています)にて コンストラクタのことですね。↓のような。 public partial class AAAA : ??? { public AAAA() { InitializeComponent(); this.test.ItemSource = 。。。 } } [コンストラクター - C# プログラミング ガイド | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/constructors) > それを下記のようにして設定している箇所がありました。 だったら「ItemSource="{Binding}" いらないじゃん」ってのはありますがw なんにせよ解決されたようでよかったです^^
guest

回答1

0

自己解決

データベースから取得した値を、C#のソースのなかで下記にように設定していそうです。

this.test.ItemSource = (データベースから取得した値を格納したリスト)

投稿2023/12/07 04:38

daityan

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問