您好我正在学习MVVM和Win8应用程序开发,并且我无法通过XAML将ObservableCollection(位于NoteViewModel.cs中)绑定到我的MainPage列表框(或listview)。
public ObservableCollection<Note> NotesList;
Model是一个简单的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实现为单个注释。
有许多教程将绑定集合添加到列表框中, 但我没有找到一个显示MVVM正确方法的方法。
任何帮助?
答案 0 :(得分:3)
您需要将View(MainPage)绑定到ViewModel,而不是将列表的DataContext设置为集合
然后在视图的xaml中,将列表的ItemSource绑定到ViewModels NotesList属性
E.G。
视图模型:
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绑定到此资源
<Grid x:Name="LayoutRoot" DataContext="{StaticResource NoteViewModel}">
设置DataContext之后,需要通过绑定为notesListView控件设置ItemSource
ItemSource={Binding NotesList}
答案 1 :(得分:1)
对于简单的测试用例场景,请尝试以下方法:
创建ViewModel:
// Create a property as an ObservableCollection<YourType> LstItemName in your ViewModel
// On your ViewModel constructor, create a new LstItemName instance.
// Create a property as "YourType" ItemName to bind to the selected Item of your List
创建视图:
// Create a property of your ViewModel (codeBehind)
// On your Views Constructor, create a new ViewModel instance. (codeBehind)
// On loaded event of your View set the DataContext = ViewModel (codeBehind)
在您的列表中的XAML上:
<List
ItemSource={Binding LstItemName}
SelectedItem={Binding ItemName}
/>
请记住使用ViewModel添加列表项。
答案 2 :(得分:0)
对于非常轻松的mvvm尝试学习一些强制它的库,我使用caliburn micro。它易于设置并提供许多非常有用的组件。