2010-08-12 51 views
1

更新列表框數據以我的Silverlight應用程序我有一個列表框的視圖:與RaisePropertyChanged

<ListBox Canvas.Left="12" Canvas.Top="72" Height="468" Name="invoiceList" Width="453" ItemsSource="{Binding ElementList}" > 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Name}" /> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
</ListBox> 

這勢必會在我的VM元素的列表。問題是,當我添加新的元素,一個接一個,用接力命令:

public RelayCommand<Element> AddNewElement = new RelayCommand<Element>(NewElement(element)); 

    public void NewElement(Element element) 
    { 
     if(ElementList == null) ElementList = new List<Element>(); 
     if (element != null) ElementList.Add(element); 
     RaisePropertyChanged("ElementList"); 
    } 

列表框只更新一次,即它顯示了收集的只有第一個元素,但更多的項目都在裏面元素列表

回答

1

您需要綁定到ObservableCollection類型的列表,然後每次更新列表集合都會觸發綁定更新。

關於如何創建您的列表中可觀察到的集合示例:

public ObservableCollection<string> MyElements { get; set; } 
public void FillList() 
{ 
    List<string> testList = new List<string>() {"string1", "string2"}; 
    MyElements = new ObservableCollection<string>(testList); 
} 

MyElements.Add("string3")將觸發綁定更新

編輯:我添加了一個工作示例,我公司提供的XAML和ViewModelCode配合使用acommand的添加一些字符串:

XAML:

<ListBox ItemsSource="{Binding MyStrings}" /> 
<Button Command="{Binding AddExtraStringCommand}" Content="Add ExtraString" /> 

viewmodel.cs

public class Window1ViewModel : ViewModelBase 
{ 
    public ObservableCollection<string> MyStrings { get; set; } 
    public RelayCommand AddExtraStringCommand { get; set; } 

    public Window1ViewModel() 
    { 
     patient = new Patient() { BirthdayString = "21/11" }; 
     MyStrings = new ObservableCollection<string>() { "string1", "string2", "string3" }; 
     AddExtraStringCommand = new RelayCommand(AddExtraString); 
    } 

    public void AddExtraString() 
    { 
     MyStrings.Add("nog enen extra om: " + DateTime.Now); 
    } 
} 

我沒有觸發RaisePropertyChanged,使其工作。也許你可以檢查你的代碼到這個代碼示例。

+0

非常感謝,幾乎解決了我的問題!但仍然MyElements.Add(「字符串」)後,我不得不調用RaisePropertyChanged(「PropertyName」)becouse添加方法沒有觸發綁定更新,現在它工作正常。 – tchrikch 2010-08-12 12:09:10

+0

我添加了一個工作代碼示例。試着檢查你的代碼,因爲這是在我的測試項目中工作 – 2010-08-12 12:52:23

+0

你能接受這個答案,所以問題被標記爲接受 – 2010-08-12 13:37:45

相關問題