2010-11-05 81 views
1

我使用一個ListBox控件,像這樣:Silverlight的ListBox控件不與一個ItemTemplate重新綁定正確

<ListBox Name="lbItemsList" ItemsSource="{Binding}" > 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding ID}" Padding="5,0,0,0" /> 
       <TextBlock Text=" - " Padding="5,0,0,0" /> 
       <TextBlock Text="{Binding Description}" Padding="5,0,0,0" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

然後,在我的代碼動態集合綁定到列表框,如下所示:

lbItemssList.ItemsSource = _itemsList.Values; 

但有時我需要重新綁定到列表框的項目的不同或修改列表。當我這樣做,ListBox中不與新的列表更新和似乎綁定工作不正常,除非我這樣做:

lbItemssList.ItemsSource = null; 
lbItemssList.ItemsSource = _itemsList.Values; 

我已經做了同樣的事情,與其他的ListBox控件並沒有這個問題。我在這裏錯過了什麼?

回答

1

首先沒有「綁定」在這裏,你只需將一個集合分配給ItemsSource屬性。

ItemsSource屬性會將分配給它的值與當前值進行比較,如果值相同,它將不會執行任何操作。

我的猜測是你的Values屬性不是ObservableCollection(在這種情況下,ListBox將跟蹤收藏的變化,而不需要任何東西)。此外,雖然您可能已更改Values集合的內容,但它仍然是最初分配給ItemsSource的集合的同一實例。

+0

xaml中存在一個綁定(與當前的DataContext相關),但它在代碼隱藏中被覆蓋:) – 2010-11-08 02:06:06

+0

Aaahh - 它只是查看它是否是不同的實例,而不是集合是否有任何不同。我懂了。這回答了,謝謝! – Zannjaminderson 2010-11-08 16:40:11

0

我累了,在我身邊,它的工作正常。 我的代碼

public MainPage() 
    { 
     InitializeComponent(); 
     BindData(); 
    } 

private void BindData() 
    { 
     List<MyClass> listClass = new List<MyClass>(); 
     for (int i = 0; i < 20; i++) 
     { 
      MyClass aMyClass = new MyClass(); 
      aMyClass.Description = "Description " + i.ToString(); 
      aMyClass.ID = i; 
      listClass.Add(aMyClass); 
     } 

     lbItemsList.ItemsSource = listClass; 
    } 

private void buttonaa_Click(object sender, RoutedEventArgs e) 
    { 
     List<MyClass> listClass = new List<MyClass>(); 
     for (int i = 20; i < 40; i++) 
     { 
      MyClass aMyClass = new MyClass(); 
      aMyClass.Description = "Description " + i.ToString(); 
      aMyClass.ID = i; 
      listClass.Add(aMyClass); 
     } 
     lbItemsList.ItemsSource = null; 
     lbItemsList.ItemsSource = listClass; 
    } 



<ListBox Name="lbItemsList" ItemsSource="{Binding}" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding ID}" Padding="5,0,0,0" /> 

        <TextBlock Text="{Binding Description}" Padding="5,0,0,0" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

請檢查您是否歌廳從DATABSE條記錄相同的,你在想該列表是不爽快

+0

我認爲@Zannjaminderson是問爲什麼初始分配'null'是必要的,以使其工作。在你的情況下,你可以刪除'null'賦值,它仍然可以工作。請參閱可能的解釋。 – AnthonyWJones 2010-11-06 17:53:23

相關問題