none
【C# (WPF - MVVM)】ItemsSourceでバインディングしているListBoxのアイテムが表示されない RRS feed

  • 質問

  • 下のように、ListBoxにバインディングしているItemsSourceにアイテムを追加してもアイテムが表示されません。

    どうすればいいのでしょうか…?

    MainWindow.xaml : XAML

                    <ListBox Background="Transparent" ItemsSource="{Binding Path=Result, Mode=OneWay}">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Vertical">
                                    <TextBlock Text="{Binding Path=Text, Mode=OneWay}"/>
                                </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
    

    MainWindowViewModel.cs : C#

            private ObservableCollection<Models.Result> _result;
            public ObservableCollection<Models.Result> Result
            {
                get { return _result; }
                set
                {
                    if (value != _result) _result = value;
                }
            }
    
            public MainWindowViewModel()
            {
                _result = new ObservableCollection<Models.Result>();
                _result.Add(new Models.Result() { Text = "Hello World!" });
            }

    Result (Model): C#

        public class Result
        {
            public string Text { get; set; }
        }

    2019年6月26日 12:23

回答

  • MainWindowViewModelのResultプロパティのSetにブレークポイントを設定しておいてデバッグ実行した場合、ブレークで止まりますか?
    止まらないのであればItemsSourceにバインドできていないという事になります。

    ListBoxのDataContextはどうなっていますか?
    VisualStudioのバージョンがいくつなのか書かれていないので不明ですが、VisualStudio2015以降であればLive Visual Treeで調べられます。
    「メニュー->ツール->オプション->デバッグ->全般->XAMLのUIデバッグツールを有効にする」にチェックを入れた状態でデバッグを開始して、「メニュー->デバッグ->ウィンドウ」のライブビジュアルツリーとライブプロパティエクスプローラーを表示させて、問題のListBoxを選択すると、ライブプロパティエクスプローラーでDataContextを見れます。
    DataContextにMainWindowViewModelは適用されていますか?

    適用されているのにまだ表示されないのであれば、ツリーの階層の下を調べてListBoxItemがどうなっているかなどを調べていく必要があるでしょう。

    #どこかのStyleでVisibilityプロパティが変更されていて非表示になってなどの可能性は他にもあるでしょうがとりあえず


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク ttkk_737 2019年6月30日 6:56
    2019年6月26日 13:11

すべての返信

  • MainWindowViewModelのResultプロパティのSetにブレークポイントを設定しておいてデバッグ実行した場合、ブレークで止まりますか?
    止まらないのであればItemsSourceにバインドできていないという事になります。

    ListBoxのDataContextはどうなっていますか?
    VisualStudioのバージョンがいくつなのか書かれていないので不明ですが、VisualStudio2015以降であればLive Visual Treeで調べられます。
    「メニュー->ツール->オプション->デバッグ->全般->XAMLのUIデバッグツールを有効にする」にチェックを入れた状態でデバッグを開始して、「メニュー->デバッグ->ウィンドウ」のライブビジュアルツリーとライブプロパティエクスプローラーを表示させて、問題のListBoxを選択すると、ライブプロパティエクスプローラーでDataContextを見れます。
    DataContextにMainWindowViewModelは適用されていますか?

    適用されているのにまだ表示されないのであれば、ツリーの階層の下を調べてListBoxItemがどうなっているかなどを調べていく必要があるでしょう。

    #どこかのStyleでVisibilityプロパティが変更されていて非表示になってなどの可能性は他にもあるでしょうがとりあえず


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク ttkk_737 2019年6月30日 6:56
    2019年6月26日 13:11
  • ご回答ありがとうございます。

    やはりItemsSourceにバインドできていませんでした…

    最終的にMainWindowViewModelを以下のようにすることで解決できました。

    MainWindowViewModel.cs : C#

            public ObservableCollection<Models.Result> Result { get; set; }
    
            public MainWindowViewModel()
            {
                Result = new ObservableCollection<Models.Result>();
                Result.Add(new Models.Result() { Text = "Hello World!" });
            }


    2019年6月30日 6:56