在两个类C#之间访问类中的数据

时间:2015-02-27 11:53:53

标签: c#

我有一个问题,我需要访问类中的数据,我插入另一个类。 示例如下:

程序调出函数如下:

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 InsertData
{
    DataFromADVM _DataVm = new DataFromADVM();
    public void Insert()
    {
        DataFromAD dataFromAd = new DataFromAD();
        dataFromAd.Id = 0;
        dataFromAd.Key = "name";
        dataFromAd.Value = "Peeter";
        _DataVm.AddDataFromAD(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?
   }
}

3 个答案:

答案 0 :(得分:0)

您需要创建对您尝试阅读表单的实例的引用,否则该类将不知道您尝试读取的实例,即使只有一个实例.....

如果您创建

,则可以引用GetData类,并引用DataFromADVM
DataFromADVM _data;
 public GetData(DataFromADVM data)
        {
            _data = data;
            InitializeComponent();
        }

答案 1 :(得分:0)

您可以通过以下方式查找对ViewModel的引用:

using Microsoft.Practices.ServiceLocation;
public class GetData {
    DataFromADVM _data;
    public GetData() {
        _data = ServiceLocator.Current.GetInstance<DataFromADVM>();
    }
}

工作原理: View ViewModel 之间的连接将使用 ViewModelLocator 进行设置。创建视图时,将 DataContext 设置为定位器

DataContext="{Binding RandomName, Source={StaticResource Locator}}"

Locator 中,绑定到 View 的所有已使用的 ViewModel 将被注册,属性提供参考:

public class ViewModelLocator {
    static ViewModelLocator() {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
        SimpleIoc.Default.Register<DataFromADVM>();
    }
    public RandomName DataFromADVM {
        get {
            return ServiceLocator.Current.GetInstance<DataFromADVM>();
        }
    }
}

如果您不想自己设置,请尝试MVVM Light Toolkit或类似的工具包。

答案 2 :(得分:0)

好的,通过一些评论和研究得到了解决方案:

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