代码之家  ›  专栏  ›  技术社区  ›  tchrikch

使用RaisePropertyChanged更新列表框数据

  •  1
  • tchrikch  · 技术社区  · 14 年前

    <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中的元素列表。问题是,当我使用Relay命令逐个添加新元素时:

    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");
        }
    

    listbox只更新一次,即它只显示集合的第一个元素,尽管ElementList中有更多的项

    1 回复  |  直到 14 年前
        1
  •  1
  •   Wouter Janssens    14 年前

    您需要绑定到ObservaleCollection类型的列表,然后对列表集合的每次更新都将触发要更新的绑定。

    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,并使用命令添加了一些字符串:

    xaml编号:

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

    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来让它工作。也许你可以检查你的代码到这个代码例子。