就上下文而言,我正在构建通用的Windows Store应用程序。
我刚刚开始学习C#和MVVM模式,我需要正确实现绑定的帮助。
我已经阅读了本教程(绑定)并了解了它的工作原理,但是在此示例中,进行绑定的代码存储在View类中。
public partial class MainPage : Page
{
public ObservableCollection<TermTest> MyTerms = new ObservableCollection<TermTest>();
public MainPage()
{
this.InitializeComponent();
MyTerms.Add(new TermTest("BNC", "Wire"));
MyTerms.Add(new TermTest("Lens", "Collects light"));
this.DataContext = new CollectionViewSource { Source = MyTerms };
}
据我了解,这是糟糕的设计。在我的实现中,我将使用模型来检索将放入Observable集合中的数据。然后在我的ViewModel中,我想将ObservableCollection绑定到正在使用它的XAML控件,而不是将Collection发送到View,然后在View中调用一个方法来填充XAML控件。
那是这样做的正确方法吗,如果是这样,应该怎么做,因为我不知道如何向我的ViewModel公开XAML控件(而且我不应该这样,对吗?)。
我知道我可以公开创建Mainpage的新实例的控件,但这没用,因为我需要绑定到当前实例。
Mainpage Test = new MainPage();
有人可以帮我解释一下吗?-我已经阅读了很多书,或者找不到答案或不理解!
谢谢,詹姆斯
首先,您肯定有正确的想法。
您要执行的操作是创建一个ViewModel对象(已实现INotifyPropertyChanged
),如下所示:
public class MainViewModel : INotifyPropertyChanged
{
//INPC implementation
public ObservableCollection<TermTest> MyTerms
{
//Standard INPC property stuff
}
}
请注意,我使用了一个属性。您只能绑定到属性,并且需要set方法引发PropertyChanged
事件。
然后,为视图设置数据上下文。您可以通过多种方式执行此操作,但最简单的方法是:
public MainView() //Default Constructor
{
InitializeComponent();
DataContext = new MainViewModel();
}
最后,绑定!
<ListView ItemsSource="{Binding MyTerms}"/>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句