将ViewModel List <t>绑定到C#Windows Universal App中的Listbox

时间:2015-05-21 22:49:34

标签: c# xaml mvvm listbox windows-store-apps

我有一个列表框,我想在项目添加到列表时更新。我知道我需要绑定列表框。我试图遵循这个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的新手。请帮忙。

1 个答案:

答案 0 :(得分:3)

  1. 使用ObservableCollection<T>,而不是List<T>。前者旨在与MVVM一起使用,后者则不然。您将自动收到所有通知。这对于List<T>是可行的,但你必须编写更多的代码,而且性能会更差更多,特别是对于大型集合。只是不要这样做。

  2. 如果在构造函数中创建集合,将其分配给只读属性并且永远不会更改其实例(这是您应该这样做的方式),您甚至不需要实现INPC。

  3. 实施INPC时,您需要在更改属性后调用RaisePropertyChanged一次,并使用已更改的属性名称,而不是随机无关的字符串。