定义一个字段并在MainViewModel中使用它

时间:2014-08-04 18:41:19

标签: c# wpf mvvm mvvm-light

在使用MVVM-light并开始学习如何使用之前,我在MainWindow.xaml.cs中定义了一个字段,用于保存在同一文件中使用的字符串列表。

// MainWindow.xaml.cs
public static List<string> FieldName = new List<string>();

现在我很困惑使用/编写字段并在MainViewModel.cs中使用它来观察MVVM模式的最佳方法是什么?

方式1:MainWindow.xaml.cs中定义字段,并通过调用MainViewModel.csMainWindow.FieldName中使用该字段。

方式2:MainViewModel.cs中定义字段并简单地使用它。 如果可以,那么定义字段的最佳方法是什么?

感谢。

2 个答案:

答案 0 :(得分:0)

MainViewModel中定义属性(不是字段)并使用它(例如将视图绑定到它)。

答案 1 :(得分:-2)

我也开始使用WPF,但首先,我听说在数据绑定中使用字段很糟糕(你将在WPF中使用很多)。你需要使用属性(最大的优点之一是使用INotifyPropertyChanged),但我听说将一个MainViewModel中的所有字段和datacontext合并在一起也是很好的做法:

public class MainViewModel 
{
    MyDataContext datacontext = new MyDataContext();
}

public class MyDataContext
{
    public static List<string> FieldName = new List<string>();
}

(重要提示:这并没有将FieldName实现为属性,我没有实现它,因为你阅读下面的帖子,只是写了这个来演示如何将属性和对象封装到一个DataContext中)

这使您只能建立一个DataContext,同时仍允许您访问主要内容中的其他DataContext。另外,不要忘记使用DependencyProperty,或在类中使用字段实现INotifyPropertyChanged,以便在更改时收到通知。

以下是演示的简单属性实现:

private string _MyProperty;

public string MyProperty
{
    get { return _MyProperty;}
    set { _MyProperty = value;}
}

首先,您需要将该字段转换为属性,这里有一个帖子解释: How to create a property for a List<T>

如果您希望更改反映在您的界面上,请不要忘记实施INotifypropertychanged:Implementing INotifyPropertyChanged - does a better way exist?