我有一个问题,我需要访问类中的数据,我插入另一个类。 示例如下:
程序调出函数如下:
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?
}
}
答案 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;
}
}