【发布时间】:2015-02-20 14:27:41
【问题描述】:
我有些困惑,为什么我不能将课程之外的项目添加到公共 ObservableCollection。
假设我有一个类如下:
public class TestClass
{
ObservableCollection<ViewModel> test;
public TestClass()
{
test = CreateDS();
}
protected ObservableCollection<ViewModel> CreateDataSource()
{
ObservableCollection<ViewModel> vm = new ObservableCollection<ViewModel>();
return vm;
}
public ObservableCollection<ViewModel> Data {get {return test; } }
public ObservableCollection<String> hosts {get; set;}
// also tried this way instead
public ObservableCollection<String> hosts = new ObservableCollection<String>();
}
我已经通过执行以下操作初始化了该类,或者我认为是这样的:
TestClass tc = new TestClass();
tc.hosts.Add(Environment.MachineName);
DataContext = tc;
可以向我解释一下为什么上面的例子总是在ObservableCollection<String>hosts中返回null
但如果我执行以下操作,使用 string[] hosts,我至少可以获取值而不是返回 null
public class TestClass
{
ObservableCollection<ViewModel> test;
string[] hosts = new string[]
{
"server1",
"server2"
};
public TestClass()
{
test = CreateDS();
}
protected ObservableCollection<ViewModel> CreateDS()
{
ObservableCollection<ViewModel> vm = new ObservableCollection<ViewModel>();
return vm;
}
public ObservableCollection<ViewModel> Data {get {return test; } }
}
我需要从类外的按钮事件中访问和填充hosts ObservableCollection。我是 mvvm 和类的新手。
【问题讨论】:
-
你的第二个例子甚至没有编译。
-
认为这是由于试图返回 res 而不是 vm
-
“有人可以向我解释为什么这不起作用”什么不起作用?你得到什么错误(如果有的话)?第二个以什么方式“工作”?因为您显然可以
.Add到一个数组,即使它不是私有的。 -
hosts为空,因为您从未为它赋值。但是您说您尝试过的这种替代public ObservableCollection<String> hosts = new ObservableCollection<String>();应该可以工作,因为您现在已经为hosts分配了一个值。此外,可能值得查看 C# 样式指南并遵循那里的约定。它使其他人更容易查看您的代码。
标签: c#