C# 在两个类C之间访问类中的数据#
我有一个问题,我需要访问类中的数据,我插入了另一个类。 示例如下:C# 在两个类C之间访问类中的数据#,c#,C#,我有一个问题,我需要访问类中的数据,我插入了另一个类。 示例如下: static class Program { static void Main(string[] args) { // ... InsertData.Insert(); GetData.Read(); // ... } } 程序调用以下函数: static class
static class Program
{
static void Main(string[] args)
{
// ...
InsertData.Insert();
GetData.Read();
// ...
}
}
程序调用以下函数:
static class Program
{
static void Main(string[] args)
{
// ...
InsertData.Insert();
GetData.Read();
// ...
}
}
我在这里保存我的数据:
public class DataFromADVM
{
private ObservableCollection<DataFromAD> _ADData;
public ObservableCollection<DataFromAD> ADData
{
get { return _ADData; }
set { _ADData = value; }
}
public DataFromADVM()
{
this._ADData = new ObservableCollection<DataFromAD>();
}
internal void AddDataFromAD(DataFromAD dataFromAd)
{
_ADData.Add(dataFromAd);
}
}
读取数据:
public class GetData
{
public void Read()
{
// if I create new ViewModel here, then data will be empty
// how could I access to ADData in DataFromADVM in this class?
}
}
您需要创建一个对您试图从表单读取的实例的引用,否则类将不知道您试图从哪个实例读取,即使只有一个实例 如果创建
DataFromADVM _data;
public GetData(DataFromADVM data)
{
_data = data;
InitializeComponent();
}
通过如下方式定位ViewModel,可以获得对其的引用:
using Microsoft.Practices.ServiceLocation;
public class GetData {
DataFromADVM _data;
public GetData() {
_data = ServiceLocator.Current.GetInstance<DataFromADVM>();
}
}
在定位器中,绑定到视图的所有已用ViewModels都将被注册,并且属性将提供参考:
public class ViewModelLocator {
static ViewModelLocator() {
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<DataFromADVM>();
}
public RandomName DataFromADVM {
get {
return ServiceLocator.Current.GetInstance<DataFromADVM>();
}
}
}
公共类ViewModelLocator{
静态ViewModelLocator(){
ServiceLocator.SetLocatorProvider(()=>SimpleIoc.Default);
SimpleIoc.Default.Register();
}
公共随机名称DataFromADVM{
得到{
返回ServiceLocator.Current.GetInstance();
}
}
}
如果您不想自己设置这些,请尝试使用或类似的工具包。好的,由于一些评论和研究,您获得了解决方案:
static class Program
{
Static DataFromADVM _vm
static void Main(string[] args)
{
// ...
_vm = InsertData.Insert();
GetData.Read(_vm);
// ...
}
}
public class InsertData
{
DataFromADVM _DataVm = new DataFromADVM();
public static DataFromADVM Insert()
{
DataFromAD dataFromAd = new DataFromAD();
dataFromAd.Id = 0;
dataFromAd.Key = "name";
dataFromAd.Value = "Peeter";
_DataVm.AddDataFromAD(dataFromAd);
}
return _DataVm;
}
public class GetData
{
public void Read()
{
var checkList = _vm.ADData.Count;
return checkList;
}
}
我想您可以使用视图的DataContext属性,只需确保DataContext的类型为DataFromADVM。而且不需要创建新的ViewModel为什么在不同的类中读取而不是在
DataFromADVM
上读取?这段代码中有一个很大的味道:任何以动词命名的类都可能是错误的。您有两个。您可以使用DataFromADVM类的同一对象来插入和读取数据。我认为您正在插入和读取不同的类,并且您的DataFromADVM对象在读取之前已被处理。例如,类名是,我在程序中不这样使用它们。我可以防止数据被处置吗?这应该如何工作?因为现在我得到了你的例子的空引用。我试图提供一种方法让你开始使用它。但您可以简单地在示例项目中尝试MVVM Light,看看MainView是如何连接到其ViewModel的。据我所知,在这个示例中,我需要返回并发送数据
值。在控制台应用程序中,我有一个方法,我在不同的类中调用这些函数。
static class Program
{
Static DataFromADVM _vm
static void Main(string[] args)
{
// ...
_vm = InsertData.Insert();
GetData.Read(_vm);
// ...
}
}
public class InsertData
{
DataFromADVM _DataVm = new DataFromADVM();
public static DataFromADVM Insert()
{
DataFromAD dataFromAd = new DataFromAD();
dataFromAd.Id = 0;
dataFromAd.Key = "name";
dataFromAd.Value = "Peeter";
_DataVm.AddDataFromAD(dataFromAd);
}
return _DataVm;
}
public class GetData
{
public void Read()
{
var checkList = _vm.ADData.Count;
return checkList;
}
}