none
combobox バインド RRS feed

  • 質問

  •  combobox バインドデータを外部のクラスから取得したい
    下記 サンプルな理解できたのですが
    <Window x:Class="ListBoxComboBox_WPF01_2.Window1" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:ListBoxComboBox_WPF01_2" 
        Title="Window1" Height="300" Width="300"    <Window.Resources        <x:Array x:Key="SamplePersonData" Type="local:Person"            <local:Person ID="1" Name="新宿 一郎" /> 
                <local:Person ID="2" Name="初台 次郎" /> 
                <local:Person ID="3" Name="代田橋 三郎" /> 
                <local:Person ID="4" Name="大手町 史郎" /> 
                <local:Person ID="5" Name="調布 五郎" /> 
            </x:Array> 
        </Window.Resources> 
        <Grid        <Grid.RowDefinitions            <RowDefinition Height="*" /> 
                <RowDefinition Height="Auto" /> 
            </Grid.RowDefinitions> 
     
            <!--リストボックスに任意オブジェクトのコレクションを指定する場合は 
                ItemsSourceプロパティのほかに 
                DisplayMemberPathに表示項目のパスを、 
                SelectedValuePathにSelectedValueに指定する項目のパスに指定する--> 
            <ListBox Grid.Row="0" Margin="5"  
                     ItemsSource="{StaticResource SamplePersonData}"  
                     DisplayMemberPath="Name"  
                     SelectedValuePath="ID" /> 
     
            <ComboBox Grid.Row="1" Margin="5"   
                      ItemsSource="{StaticResource SamplePersonData}"  
                      DisplayMemberPath="Name"  
                      SelectedValuePath="ID"  /> 
        </Grid> 
    </Window>

    上記の <x:Array x:Key="SamplePersonData" Type="local:Person"> のデータ部分を

    外部のクラスから取得したいと思い苦労しています。

    例 public class nPerson : ObservableCollection<string>

         public nPerson()

    {

        DataTable tbldata = new DataTable;

            tbldata.Columns.Add("ID", typeof(int);
            tbldata.Columns.Add("Name", typeof(string));
            var ns = new nState { ID = "1", Name = "aaa" };
           
    tbldata.Rows.Add(ns);
    表示しない。

    どうしたら 外部からできますかよろしくお願いします 

    2011年11月28日 18:48

回答

  • nStateがどういうものかはわからないのですが、もしDataTableに格納するのであれば、以下のような感じになります。

    var tbldata = new DataTable();
    
    tbldata.Columns.Add("ID", typeof(int));
    tbldata.Columns.Add("Name", typeof(string));
    //var ns = new nState { ID = 1, Name = "aaa" };
    var dr = tbldata.NewRow();
    dr["ID"] = 1;
    dr["Name"] = "aaa";
    tbldata.Rows.Add(dr);
    
    comboBox1.DataContext = tbldata;
    

    もし、nStateのままバインドしたいのであれば、ListにnStateを格納してバインドすれば良いでしょう。

    comboBox1.DataContext = new List<nState>() { new nState() { ID = 1, Name="aaa"} };
    

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答の候補に設定 山本春海 2011年12月7日 8:09
    • 回答としてマーク 山本春海 2011年12月14日 6:28
    2011年11月29日 0:55
    モデレータ

すべての返信

  • nStateがどういうものかはわからないのですが、もしDataTableに格納するのであれば、以下のような感じになります。

    var tbldata = new DataTable();
    
    tbldata.Columns.Add("ID", typeof(int));
    tbldata.Columns.Add("Name", typeof(string));
    //var ns = new nState { ID = 1, Name = "aaa" };
    var dr = tbldata.NewRow();
    dr["ID"] = 1;
    dr["Name"] = "aaa";
    tbldata.Rows.Add(dr);
    
    comboBox1.DataContext = tbldata;
    

    もし、nStateのままバインドしたいのであれば、ListにnStateを格納してバインドすれば良いでしょう。

    comboBox1.DataContext = new List<nState>() { new nState() { ID = 1, Name="aaa"} };
    

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答の候補に設定 山本春海 2011年12月7日 8:09
    • 回答としてマーク 山本春海 2011年12月14日 6:28
    2011年11月29日 0:55
    モデレータ
  • こんにちは、tonykun_123 さん。

    MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。
    しばらく経ちましたが、trapemiya さんからの投稿は確認されましたか?

    参考になる情報をいただいているかと思われましたので、勝手ながら私のほうで一旦回答としてマークさせていただきました。
    trapemiya さん、アドバイスありがとうございます。

    いただいた情報の中で、解決に役立った投稿や、参考になる情報など有効な情報には回答としてマークすることをお願いしています。
    今後、同じ問題でこのスレッドを参照される方にも、有効な情報を活用いただけるかと思いますので、ご協力よろしくお願いいたしますね。

    tonykun_123 さん、その後いかがでしょうか。
    もし不明点などある場合などは、現在の状況など情報を更新されると何か情報を得られるかもしれません。

    今後とも、MSDN フォーラムをよろしくお願いいたします。それでは。
                                                               
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2011年12月14日 6:13