2010-08-12 48 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

相关问题