【问题标题】:How to populate values in ObservableCollection?如何在 ObservableCollection 中填充值?
【发布时间】:2014-08-08 18:55:40
【问题描述】:

我正在使用 C# WPF 开发基于网络的应用程序。该应用程序的目的是通过在后端运行的 telnet 命令配置网络设备。

我卡住的问题是数据网格中显示了多个由用户添加的值,现在我想遍历所有值并配置我的设备。我使用ObservableCollection 来保存数据网格中存在的值,但在foreach 循环中我无法遍历所有值并填充它们,因为我认为问题是我的ObservableCollection 是空的。请告诉我填充数据的方式。

这是我的代码:

 public ObservableCollection<VLANSPropertyClass> vlan { get; set; }

 public bool VLAN()
        {
            vlan = new ObservableCollection<VLANSPropertyClass>();

            string _command;

            _command = "config t \n";
            WriteAPCommand(_command);

            ReadAPCommand();

            foreach(VLANSPropertyClass v in vlan)
            {
                Console.WriteLine("-----------------FOREACH STARTED----------------");
                _command = "vlan " + v.vid + "\n";
                WriteAPCommand(_command);

                ReadAPCommand();

                _command = "name " + v.vname + "\n";
                WriteAPCommand(_command);

                ReadAPCommand();

                _command = "interface " + v.vid + "\n";
                WriteAPCommand(_command);

                ReadAPCommand();

                _command = "ip address " + v.ip + " " + v.mask + "\n";
                WriteAPCommand(_command);

                ReadAPCommand();

                _command="exit\r";
                WriteAPCommand(_command);

                ReadAPCommand();

                _command = "interface " + v.vports + "\n";
                WriteAPCommand(_command);

                ReadAPCommand();

                _command = "switchport access " + v.vid + "\n";
                WriteAPCommand(_command);

                ReadAPCommand();

                _command = "copy runningconfig startupconfig\n";
                WriteAPCommand(_command);

                ReadAPCommand();

            }
            Console.WriteLine("-----------------FOREACH COMPLETED----------------");
            return true;

        }

VLANSProperty 类是:

public class VLANSPropertyClass
{
    public string vname { get; set; }

    public int S_No { get; set; }

    public string vid { get; set; }

    public string ip { get; set; }

    public string mask { get; set; }

    public string vports { get; set; }
}

读写方法是:

 public  void WriteAPCommand(string _apCommand)
        {
            _telnetData = new byte[1024];
            _telnetData = Encoding.ASCII.GetBytes(_apCommand);
            _networkstream.Write(_telnetData, 0, _telnetData.Length);
            Thread.Sleep(2000);
        }

 public string ReadAPCommand()
        {
            _telnetData = new byte[1024];
            _recvBytes = _networkstream.Read(_telnetData, 0, _telnetData.Length);
            _stringData = Encoding.ASCII.GetString(_telnetData, 0, _recvBytes);
            Console.WriteLine(_stringData);
            return _stringData;
        }

【问题讨论】:

  • 您永远不会向您的 vlan 收藏添加任何内容。
  • 可能与QuestionChat相关

标签: c# wpf mvvm datagrid


【解决方案1】:

您需要先使用数据填充您的集合,然后才能对其进行迭代并对项目值执行任何操作。如何填充集合以及如何获取数据完全取决于您。我们不知道任何这些细节,但一般来说,您会这样做:

vlan = new ObservableCollection<VLANSPropertyClass>();
VLANSPropertyClass item = new VLANSPropertyClass("fill", "with", "valid", "values");
vlan.Add(item);

或者,如果您从外部来源访问数据:

foreach (VLANSPropertyClass item in SomeDataAccessMethodThatReturnsACollection)
{
    vlan.Add(item);
}

【讨论】:

  • 根据您的第二个选项..我的属性 vlan 在 vi​​ewmodel 中,但我正在使用类名的模型中访问它,但我无法访问它。vlan 绑定到我的数据网格如果我能够访问它,我就可以填充我的数据。告诉我如何从模型中访问vlan 属性?
  • 你的模型指的是什么?
  • Model 是我实现业务逻辑的地方,但我的 vlan 属性在我的 viewmodel 中实现,这就是如果我能够访问 ViewModel 中的 vlan 属性而不是可以填充的原因,我将面临空引用异常数据!
  • 如果您的vlan 属性在视图模型中,那么您应该将它填充到在视图模型中。没有关于这个问题的讨论。您不应尝试从任何业务类访问此属性。您可以使用业务(数据类型)类来填充集合,或在 UI 中显示,但您在视图模型中使用它们,而不是相反。无论哪种方式,这个问题现在都开始拖延了。您需要在使用本网站之前 学习如何编程,而不是在使用时。您似乎缺少太多基本的开发知识,我无法进一步帮助您。
  • @Sheridan..是的,我对编程很陌生,我还在学习,但不幸的是,由于我的团队突然离职,开发应用程序的全部责任都在我手中,这就是我的原因我面临一些问题......明白了!
猜你喜欢
  • 2019-06-29
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
相关资源
最近更新 更多