gpt4 book ai didi

c# - 将集合绑定(bind)到列表控件

转载 作者:行者123 更新时间:2023-11-30 15:36:53 24 4
gpt4 key购买 nike

您好,我正在学习 MVVM 和 Win8 应用程序开发,我在通过 XAML 将 ObservableCollection(位于 NoteViewModel.cs 中)绑定(bind)到我的 MainPage 列表框(或 ListView )时遇到了问题。

public ObservableCollection<Note> NotesList;

模型是一个简单的 Note.cs 类,它包含 NoteText、Priority 和 RemindDate。

我现在正在做的是在 MainPage.xaml.cs 的代码隐藏文件中设置 DataContext到 ObservableCollection。

public MainPage()
{
this.InitializeComponent();
NoteViewModel nvm = new NoteViewModel();
noteListView.DataContext = nvm.NotesList;
}

在 NoteViewModel 构造函数中,我简单地创建了 2 个新的 Notes,然后将其添加到 Collection 中。

我想做的是将 XAML 中的 DataContext 设置为 NoteViewModel,将 ItemsSource 设置为 NotesList。我想稍后为单个笔记实现 DetailsView。

有很多关于将集合绑定(bind)到列表框的教程,但我还没有找到一个显示 MVVM 正确方法的方法。

有什么帮助吗?

最佳答案

您需要将您的 View (MainPage) 绑定(bind)到您的 ViewModel,而不是将列表的 DataContext 设置为集合

然后在 View 的 xaml 中,将列表的 ItemSource 绑定(bind)到 ViewModels NotesList 属性

例如

View 模型:

public NoteViewModel : INotifyPropertyChanged
{
//Collection must be a property
public ObservableCollection<Note> NotesList {get; private set;}

public NoteViewModel()
{
//Initialize your collection in the constructor
NotesList = new ObservableCollection<Note>()
}

//.
//.
//.

}

如果你愿意,你仍然可以在后面的代码中设置DataContext

public MainPage()
{
this.InitializeComponent();
NoteViewModel nvm = new NoteViewModel();
this.DataContext = nvm;
}

或者,您可以通过 View 的 xaml 设置 DataContext。假设您的 ViewModel 在命名空间 MyProject 中:

添加对您的命名空间的引用

<UserControl x:class=MyProject.MainPage
xmlns:local="clr-namespace:MyProject"
.
.
>

将 ViewModel 添加为资源

<UserControl.Resources>
<local:NoteViewModel x:Key="NoteViewModel"/>
</UserControl.Resources>

将主容器的 DataContext 绑定(bind)到此资源

<Grid x:Name="LayoutRoot" DataContext="{StaticResource NoteViewModel}">

设置 DataContext 后,您需要通过绑定(bind)为 notesListView 控件设置 ItemSource

ItemSource={Binding NotesList}

关于c# - 将集合绑定(bind)到列表控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13282724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com