Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在两个类C之间访问类中的数据#_C# - Fatal编程技术网

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;
       }
    }