2009-08-14 12 views
0

これは本当に独特です。私は単純なデータバインディングのサンプルプログラムを試しました。コレクション(IList)をリストボックスにバインドしようとしました。コレクションを変更すると、リストボックスは、ウィンドウを最大化する場合にのみ更新されます。ここにスニペットがあります。wpfでウィンドウを最大化した後に反映されるデータソース

<ListBox x:Name="myBirthdaysListBox" ItemsSource="{Binding}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <UniformGrid> 
       <Label Content="{Binding Name}"></Label> 
       <Label Content="{Binding DateOfBirth}"></Label> 
      </UniformGrid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

public Window1() 
{ 
    InitializeComponent(); 
    myCalendar = new List<Calendar>(); 
    myBirthdaysListBox.DataContext = myCalendar; 
} 

私はwpfの初心者です。私がここでひどく間違ったことをした場合、私に知らせてください。

答えて

0

List<Calendar>ではなく、BindingList<Calendar>を使用してください。バインディングリストは、アイテムが追加/削除されるなどのイベントを発生させます。

あなたが見ているのは、サイズを変更するとコントロールが再描画され、すべてのデータを再び通過していることです。私の頭の上オフ

、私はあなたがそれでアイテムがうん

+0

を変更した場合バインディングリストが通知されていることをごCalendarな上INotifyPropertyChangedを実装する必要があると信じて、これは動作しているようです(私がするBindingListでリストを置き換え)。リストに固執したい場合、カレンダークラスはINotifyPropertyChangedインターフェイスを継承する必要がありますか?私はそうしたが効果はない。なぜ私に説明できますか? – sudarsanyes

+0

INotifyPropertyChangedの実装はどのようになっていますか? –

+0

if(PropertyChanged!= null){PropertyChanged(this、新しいPropertyChangedEventArgs( "Name")); PropertyChanged(これ、新しいPropertyChangedEventArgs( "DateOfBirth")); }これは、フィールドの値を設定できる唯一の場所として、Calendarクラスのコンストラクタにこれを追加しました。だから私は両方のフィールドのPropertyChangedを募集している – sudarsanyes

関連する問題