在我的silverlight应用程序中,我有一个列表框视图:
<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 Command:
逐个添加新元素时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");
}
列表框只更新一次,即它只显示集合的第一个元素,但更多项目在ElementList中
答案 0 :(得分: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:
<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来使其工作。也许你可以检查你的代码到这个代码示例。