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

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

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

ComboBoxのItemsSourceにバインド

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

■88824 / inTopicNo.1)  ComboBoxのItemsSourceにバインド
  
□投稿者/ りんく (6回)-(2018/10/03(Wed) 11:36:03)

分類:[.NET 全般] 

Visual Studio 2017
C#
WPF
using Reactive.Bindings;

■前提  
 MainWindow に Button を配置し、その Button クリックでダイアログ(DialogA)を表示します。
 DialogA には UserControl を配置し、その UserControl には DataGrid を配置しています。
 DataGrid には DataGridTemplateColumn を配置し、
 DataGridTemplateColumn には ComboBox を配置しています。
 DialogA には DialogAViewModel が存在し、そこで
 ComboBox の ItemsSouce に設定するプロパティ(Hoge)を宣言しています。

■問題点
 ComboBox の ItemsSource に DialogAViewModel のプロパティをバインドする方法がわかりません。

 下記のコードを実行してみましたが、DialogA が表示されませんでした。
 ComboBox の ItemsSource に プロパティ(Hoge)をバインドすると何故か DialogA が表示されないです。
 なお、エラーなどは出ていません。
 バインドの仕方が悪いのだと思うのですが、よろしくお願いいたします。

DialogA
    <UserControl.Resources>
        <CollectionViewSource x:Key="HogeSource" Source="{Binding Hoge}" />
    </UserControl.Resources>

    <DataGrid ・・・>
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="hoge" Width="100" CanUserSort="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox x:Name="hogeCombo" Width="Auto" Height="Auto" IsSynchronizedWithCurrentItem="False"
                                    ItemsSource="{Binding Source={StaticResource HogeSource}}"
                                    SelectedValuePath="Number"
                                    DisplayMemberPath="Name"
                                    ・・・/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <Grid  FocusManager.FocusedElement="{Binding ElementName=hogeCombo}">
                            <ComboBox Name="hogeCombo" Width="Auto" Height="Auto" IsSynchronizedWithCurrentItem="False"
                                    ItemsSource="{Binding Source={StaticResource HogeSource}}"
                                    SelectedValuePath="Number"
                                    DisplayMemberPath="Name"
                                    ・・・/>
                        </Grid>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn> 
        </DataGrid.Columns>
    </DataGrid>

DialogAViewModel
    public ReactiveCollection<HogeHoge> Hoge { get; } = new ReactiveCollection<HogeHoge>();
    
    Hoge.Add(new HogeHoge() { Number = 1, Name = "A" });
    Hoge.Add(new HogeHoge() { Number = 2, Name = "B" });

    public class HogeHoge
    {
        public int Number { get; set; }
        public string Name { get; set; }
    }

引用返信 編集キー/
■88825 / inTopicNo.2)  Re[1]: ComboBoxのItemsSourceにバインド
□投稿者/ りんく (7回)-(2018/10/03(Wed) 12:08:50)
解決しました。

 ItemsSource="{Binding RelativeSource={RelativeSource AncestorLevel=1,AncestorType={x:Type Window}},Path=DataContext.Hoge}"

これでバインドされ、ダイアログも表示されました。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ