none
ItemsSourceの遅延バインディング RRS feed

  • 質問

  • お世話になります。

    ComboBoxのItemsSourceにBindingしたのですがエラーになってしまいました。

    xaml

    <Window.Resources>
      <src:Cities x:Key="Cities"/>
    </Window.Resources>

    <Grid>
      <ComboBox Name="comboBox1" Width="200" Height="25" ItemsSource="{Binding Source={StaticResource Cities}}" IsSynchronizedWithCurrentItem="True"/>
    </Grid>

    cs

    public partial class MainWindow : Window
    {
      public static List<string> m_CityList;
    
      public MainWindow()
      {
        InitializeComponent();
        
        m_CityList = new List<string>();
        m_CityList.Add("札幌市");
        m_CityList.Add("仙台市");
        m_CityList.Add("静岡市");
      }
    }
    
    public class Cities : ObservableCollection<string>
    {
      public Cities()
      {
        foreach (var item in MainWindow.m_CityList)
        {
          Add("札幌市");
          Add("仙台市");
          Add("静岡市");
        }
      }
    }
    
    


    ここでMainWindowコンストラクタの最後で何らかの処理を実行してCitiesをBindingすることはできますか?

    ItemsSourceをcs側で設定する方法もありますが、xaml側で設定した状態で遅延バインディングしたいんですが。

    2012年1月6日 7:00

回答

  • 以下のようにstaticなコンストラクタに書いてしまえば良いですが、

    static ComboBoxBinding2()
    {
        m_CityList = new List<string>();
        m_CityList.Add("札幌市");
        m_CityList.Add("仙台市");
        m_CityList.Add("静岡市");
    }
    
    public ComboBoxBinding2()
    {
        InitializeComponent();
        //m_CityList = new List<string>();
        //m_CityList.Add("札幌市");
        //m_CityList.Add("仙台市");
        //m_CityList.Add("静岡市");
    }
    

    Citiesクラスのコンストラクタのforeachで行っていることは全く意味がないように見えます。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク yty0918 2012年1月6日 17:26
    2012年1月6日 7:46
    モデレータ

すべての返信

  • 以下のようにstaticなコンストラクタに書いてしまえば良いですが、

    static ComboBoxBinding2()
    {
        m_CityList = new List<string>();
        m_CityList.Add("札幌市");
        m_CityList.Add("仙台市");
        m_CityList.Add("静岡市");
    }
    
    public ComboBoxBinding2()
    {
        InitializeComponent();
        //m_CityList = new List<string>();
        //m_CityList.Add("札幌市");
        //m_CityList.Add("仙台市");
        //m_CityList.Add("静岡市");
    }
    

    Citiesクラスのコンストラクタのforeachで行っていることは全く意味がないように見えます。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク yty0918 2012年1月6日 17:26
    2012年1月6日 7:46
    モデレータ
  • trapemiyaさん、回答ありがとうございます。

    そのやり方で解決しました。

    2012年1月6日 17:25