質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

4808閲覧

WPFでComboboxのItemsSourceにバインドされているリストが表示されない

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2019/06/24 07:05

編集2019/06/24 07:43

実現したいこと

コンボボックス1の選択状態に基づいて、コンボボックス2のItemsSourceを変更したい。
例として、コンボボックス1は"1","2"のいずれかを選択できる。
コンボボックス1の選択値が"1"の時はコンボボックス2は"A"のみ選択可能としたい。
コンボボックス1の選択値が"2"の時はコンボボックス2は"B"と"C"を選択可能としたい。

質問したいこと

コンボボックス2のItemsSourceにバインドした変数SetListの内容を設定しても、コンボボックスに何も表示されない
変更した変数に基づいてコンボボックスの表示が変わるような実装を行いたい
(補足:SetListに中には_setList1または_setList2の値が入っているが、コンボボックスに項目が表示されないです)

現状のコード

コンボボックス1のXAML

XAML

1<ComboBox ItemsSource="{Binding BaseList}" SelectedIndex="{Binding BaseIndex}" 2 Foreground="{DynamicResource MaterialDesignBody}" 3 VerticalAlignment="Center" 4 Margin="5,5,5,5" Width="50"> 5 <i:Interaction.Triggers> 6 <i:EventTrigger EventName="SelectionChanged"> 7 <i:InvokeCommandAction Command="{Binding SelectionChangedCommand}"/> 8 </i:EventTrigger> 9 </i:Interaction.Triggers> 10</ComboBox>

コンボボックス2のXAML

XAML

1<ComboBox ItemsSource="{Binding Path=SetList}" SelectedIndex="{Binding SetIndex}" 2 Foreground="{DynamicResource MaterialDesignBody}" 3 VerticalAlignment="Center" 4 Margin="5,5,5,5" Width="120"/>

ViewModel

C#

1public class ViewModel : BindableBase 2{ 3 private List<string> _baseList = new List<string>() 4 { 5 "1", 6 "2", 7 }; 8 9 public List<string> Baseist 10 => _baseList; 11 12 private int _baseIndex = 0; 13 public int BaseIndex 14 { 15 get { return _baseIndex; } 16 set { SetProperty(ref _baseIndex, value); } 17 } 18 19 private List<string> _setList1 = new List<string>() 20 { 21 "A", 22 }; 23 private List<string> _setList2 = new List<string>() 24 { 25 "B", 26 "C", 27 }; 28 29 private int _setIndex = 0; 30 public int SetIndex 31 { 32 get { return _setIndex; } 33 set { SetProperty(ref _setIndex, value); } 34 } 35 36 public List<string> SetList; 37 38 public ICommand SelectionChangedCommand { get; } 39 40 public ViewModel() 41 { 42 SelectionChangeCommand = new DelegateCommand(SelectionChange_Execute); 43 } 44 45 private void SelectionChange_Execute() 46 { 47 if (BaseIndex == 0) 48 { 49 SetList = new List<string>(_setList1); 50 } 51 else if (BaseIndex == 1) 52 { 53 SetList = new List<string>(_setList2); 54 } 55 } 56} 57 58

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

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

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

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

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

guest

回答1

0

ベストアンサー

ここが原因かはわかりませんが、SelectionChanged イベントの発生とBaseIndexの変更がどちらが先に発生するか
確証がないならBaseIndexの変更を検出したらメソッドを呼ぶようにしましょう。

C#

1 public int BaseIndex 2 { 3 get { return _baseIndex; } 4 set { SetProperty(ref _baseIndex, value, SelectionChange_Execute); } 5 }

SelectionChangedCommand 不要です。

投稿2019/06/24 07:25

hihijiji

総合スコア4150

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

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

退会済みユーザー

退会済みユーザー

2019/06/24 07:41

ありがとうございます。 残念ながら、ここが原因ではないようです。 ステップ実行の時、SetListに中には_setList1または_setList2の値が入っているようですが、表示が正しく行われないです。
hihijiji

2019/06/24 07:48

よく見たら public List<string> SetList; 変更通知プロパティになってませんね。
hihijiji

2019/06/24 07:50

原因は単純なミスですが、回答した部分も重要ですので直しておいてください。
退会済みユーザー

退会済みユーザー

2019/06/24 07:56

ありがとうございます。 SetListを変更通知プロパティに変更したら表示されるようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問