我有一个列表框,我想在项目添加到列表时更新。我知道我需要绑定列表框。我试图遵循这个question/answer。
我有一个处理列表的ViewModel:
public class Cars: INotifyPropertyChanged
{
public string model{ get; set; }
public string year{ get; set; }
public event PropertyChangedEventHandler PropertyChanged;
}
这是班级汽车:
<ListBox .... ItemsSource="{Binding listCars}">
所以我将listbox绑定到我的Viewmodel中的属性路径,即listCars。
public sealed partial class MainPage : Page
{
public static ViewModel vm = new ViewModel();
public MainPage()
{
this.InitializeComponent();
this.DataContext = vm;
}
private void button_Click(object sender, RoutedEventArgs e)
{
Cars x = new Cars();
x.model = "Ford";
x.Year = "1998";
vm.listCars.Add(x);
}
}
所以在我的Main.xaml.cs.中我按一下按钮并添加项目。即使它绑定到视图模型上的列表,它也不会被添加到列表框中。
{{1}}
我希望我解释了我的实施情况。我的ViewModel实现有什么问题。我是MVVM的新手。请帮忙。
答案 0 :(得分:3)
使用ObservableCollection<T>
,而不是List<T>
。前者旨在与MVVM一起使用,后者则不然。您将自动收到所有通知。这对于List<T>
是可行的,但你必须编写更多的代码,而且性能会更差更多,特别是对于大型集合。只是不要这样做。
如果在构造函数中创建集合,将其分配给只读属性并且永远不会更改其实例(这是您应该这样做的方式),您甚至不需要实现INPC。
实施INPC时,您需要在更改属性后调用RaisePropertyChanged
一次,并使用已更改的属性名称,而不是随机无关的字符串。