2012-03-08 6 views
1

私はコンボボックスで小さなアプリケーションを構築しようとしていますが、アイテムが正しく更新されないという問題があります。正しく更新されています。 XAMLコードを次に示します。ComboBoxはItemsCountを反映していません

   <ComboBox Name="NumbersCombo" Width="118"> 
        <ComboBox.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Title}" /> 
         </DataTemplate> 
        </ComboBox.ItemTemplate> 
       </ComboBox> 

後はcon.Numbersが文字列や数値クラスの辞書があるページのロード、上のItemsSourceのコードがされ、それゆえ値は取り付けのために送信されます。

NumbersCombo.ItemsSource = con.Numbers.Values 

後コンボボックスに新しいアイテムを追加するためのコードです:

Dim temp As New BSPLib.ContactLib.ContactCon(con.prime.Conid, False) 
con.Numbers.Add(temp.ConRowID, temp) 
NumbersCombo.ItemsSource = con.Numbers.Values 
TestLabel1.Content = NumbersCombo.Items.Count 

以下は、クラスのコードです:

Public Class ContactCon 
     Property ConId As String 
     Property ConRowID As String 
     Property Title As String 
     Property Mob1 As String 
     Property Mob2 As String 
     Property Land1 As String 
     Property Land2 As String 
     Property Email1 As String 
     Property Email2 As String 
     Property Fax1 As String 
     Property Fax2 As String 
     Property Primary As Boolean 
     Public Sub New() 
     End Sub 

     Public Sub New(ByVal contactID As String, ByVal primarynumbers As Boolean) 
      ConId = contactID 
      ConRowID = contactID & "-" & Now.ToString 
      If primarynumbers = True Then 
       Title = "Primary Details" 
      Else 
       Title = "Additional Contact Numbers" 
      End If 
      Mob1 = "" 
      Mob2 = "" 
      Land1 = "" 
      Land2 = "" 
      Email1 = "" 
      Email2 = "" 
      Fax1 = "" 
      Fax2 = "" 
      Primary = primarynumbers 
     End Sub 
    End Class 

    Public Class Contact 
     Public prime As ContactPrime 
     Public addrs As Dictionary(Of String, ContactAddress) 
     Public Numbers As Dictionary(Of String, ContactCon) 

     Public Sub New() 
      Numbers = New Dictionary(Of String, ContactCon) 

      'assigning initial ids and values 
      Dim t As New ContactCon(prime.Conid, vbYes) 
      Numbers.Add(t.ConRowID, t) 'Primary Contact Number 
     End Sub 

簡単に言うと、コンボボックスのGUIはアイテムを表示していませんが、アイテム数が正しいです、あなたが間違っている場所を教えてください。ありがとうございました。

+0

Visual Studioでデバッグモードでプログラムを起動すると、出力ペインにデータバインディングエラーが表示されますか? (これらのエラーを見るにはVS2010が必要です。) –

+0

@fmunkert、出力ウィンドウにもエラーはありません。試してみましたが、何も表示されていません。 – surpavan

+0

実行時に辞書に項目を追加していますか?つまり、辞書値をコンボボックスのItemSourceとして設定した後ですか? –

答えて

2

特定のContactConオブジェクトまたはContactConオブジェクトのコレクションが変更されたときにコンボボックスを自動的に更新したい場合、ContactConクラスはINotifyPropertyChangedを実装する必要があり、ItemSourceをINotifyCollectionChangedを実装するコレクションクラスに設定する必要がありますItemSourceを一度だけ設定する必要があることを意味します)。観察可能な辞書を実装する方法は、questionの回答セクションにあります。

これらの変更を行うと、表示されている同期の問題も解決されます。

+0

辞書を持つInotifyが初心者用のコードには大きすぎるように見えるので、他の方法を単純化する方法はありますか? – surpavan

+0

実装をダウンロードすることができます(C#の)[here](http://drwpf.com/blog/Portals/0/Samples/ObservableDictionarySample.zip) –

+0

ありがとうございます、どうもありがとうございました。私はVBに属しているからです。しかし、それは説明します。ありがとうございました。 – surpavan

1

私はあなたがキーに検索速度や一意の辞書を必要とするならば、あなたがて、CollectionChangedを実装した辞書を必要とデイブ1

に同意します。

もう1つのオプションは、ObservableCollections direcltyを使用し、LINQをルックアップに使用することです。あなたが10000もあるなら、LINQは検索のためにまだかなり速いです。あなたはコンボボックスで仮想化を使用していないので、私はリストが大きくないと思う。

+0

はい、リストは非常に少なく、最大で200アイテムに達する可能性があります。 – surpavan

関連する問題