Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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# 一次性添加ListView ObservableCollection中的所有项目(WPF Mvvm)_C#_Wpf_Listview_Mvvm_Observablecollection - Fatal编程技术网

C# 一次性添加ListView ObservableCollection中的所有项目(WPF Mvvm)

C# 一次性添加ListView ObservableCollection中的所有项目(WPF Mvvm),c#,wpf,listview,mvvm,observablecollection,C#,Wpf,Listview,Mvvm,Observablecollection,我有一个包含两列Devicename和DeviceAddress的listview。我为listview维护了一个observablecollection。我使用的是MVVM模式 查看: <ListView Height="100" ItemsSource="{Binding I2CDeviceList}" SelectedItem="{Binding SelectedI2CAddress, Mode=TwoWay}" Name="I2cDeviceList">

我有一个包含两列Devicename和DeviceAddress的listview。我为listview维护了一个observablecollection。我使用的是MVVM模式

查看:

<ListView Height="100" ItemsSource="{Binding I2CDeviceList}" SelectedItem="{Binding SelectedI2CAddress, Mode=TwoWay}" Name="I2cDeviceList">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="I2C Device" Width="190" DisplayMemberBinding="{Binding I2CDevName}" />
                        <GridViewColumn Header="I2C Device Address" Width="203" DisplayMemberBinding="{Binding I2CDeviceAddress}" />
                    </GridView>
                </ListView.View>
</ListView>
public ObservableCollection<ModelClass> I2CDeviceList
    {
        get { return _I2CDeviceList; }
        set
        {
            _I2CDeviceList = value;
            NotifyPropertyChanged("I2CDeviceList");
        }
    }
现在,在viewmodel类的构造函数中,我可以在obs.Coll中添加如下项:

public ObservableCollection<ModelClass> _I2CDeviceList = new ObservableCollection<ModelClass>()
        {                
            new ModelClass() {I2CDevName = "Other", I2CDeviceAddress= "0x00"},
            new ModelClass() {I2CDevName = "TI Codec", I2CDeviceAddress = "0x18"},  .........             
        };
public observetecollection\u I2CDeviceList=new observetecollection()
{                
新的ModelClass(){I2CDevName=“其他”,I2CDeviceAddress=“0x00”},
新的ModelClass(){I2CDevName=“TI Codec”,I2CDeviceAddress=“0x18”}。。。。。。。。。
};

但是添加15项是一项乏味的工作,我最终得到了15项声明。它们是我可以使用单个循环添加项以避免许多语句的一种方法吗?

因此,要么为ModelClass创建一个构造函数,使其更易于创建,同时填充值

public class ModelClass
{
    public string I2CDevName { get; set; }
    public string I2CDeviceAddress { get; set; }

    public ModelClass(string DeviceName, string DeviceAddress)
    {
        this.I2CDevName = DeviceName;
        this.I2CDeviceAddress = DeviceAddress;
    }
}
这将在一定程度上减少代码,但仍会有一些键入:

public ObservableCollection<ModelClass> _I2CDeviceList = new ObservableCollection<ModelClass>()
{                
    new ModelClass("Other","0x00"),
    new ModelClass("TI Codec", "0x18"), .......
};
public observetecollection\u I2CDeviceList=new observetecollection()
{                
新模型类(“其他”,“0x00”),
新模型类(“TI编解码器”,“0x18”)。。。。。。。
};
或者您可以创建一个“工厂”,ModelClass中的一个静态函数,它接受一个完整的列表并返回一个完整的ObservableCollection

因此,您必须更改列表中的一些内容,但如果您将其更改为(可能有人会想出更好的方法来更好地使用列表,但是:

List<string[]> list = new List<string[]>() { new string[] {"Other", "0x00"},
                                             new string[] {"Audience chip(eSxxx), "0x3E"}, ... };
List List=new List(){new string[]{“Other”,“0x00”},
新字符串[]{“观众芯片(eSxxx),“0x3E”},…};
然后将静态函数添加到ModelClass:

public class ModelClass
{
    public string I2CDevName { get; set; }
    public string I2CDeviceAddress { get; set; }

    public ModelClass(string DeviceName, string DeviceAddress)
    {
        this.I2CDevName = DeviceName;
        this.I2CDeviceAddress = DeviceAddress;
    }

    //Collection Factory
    public static ObservableCollection<ModelClass> CreateCollection(List<string[]> models)
    {
        ObservableCollection<ModelClass> tmpColl = new ObservableCollection<ModelClass>();
        foreach (string[] s in models)
        {
            tmpColl.Add(new ModelClass(s[0],s[1]));
        }
        return tmpColl;
    }
}
公共类模型类
{
公共字符串I2CDevName{get;set;}
公共字符串I2CDeviceAddress{get;set;}
公共模型类(字符串DeviceName、字符串DeviceAddress)
{
this.I2CDevName=设备名称;
this.I2CDeviceAddress=设备地址;
}
//收集厂
公共静态ObservableCollection CreateCollection(列表模型)
{
ObservableCollection tmpColl=新的ObservableCollection();
foreach(模型中的字符串[]s)
{
tmpColl.Add(新模型类(s[0],s[1]);
}
返回tmpColl;
}
}
然后就跑:

List<string[]> list = new List<string[]>() { new string[] {"Other",...},
                                                                      ...};
public ObservableCollection<ModelClass> _I2CDeviceList = ModelClass.CreateCollection(list);
List List=new List(){new string[]{“Other”,…},
...};
PublicObservableCollection I2CDeviceList=ModelClass.CreateCollection(列表);

Tada…

因此,要么为ModelClass创建一个构造函数,使其更易于创建,同时填充值

public class ModelClass
{
    public string I2CDevName { get; set; }
    public string I2CDeviceAddress { get; set; }

    public ModelClass(string DeviceName, string DeviceAddress)
    {
        this.I2CDevName = DeviceName;
        this.I2CDeviceAddress = DeviceAddress;
    }
}
这将在一定程度上减少代码,但仍会有一些键入:

public ObservableCollection<ModelClass> _I2CDeviceList = new ObservableCollection<ModelClass>()
{                
    new ModelClass("Other","0x00"),
    new ModelClass("TI Codec", "0x18"), .......
};
public observetecollection\u I2CDeviceList=new observetecollection()
{                
新模型类(“其他”,“0x00”),
新模型类(“TI编解码器”,“0x18”)。。。。。。。
};
或者您可以创建一个“工厂”,ModelClass中的一个静态函数,它接受一个完整的列表并返回一个完整的ObservableCollection

因此,您必须更改列表中的一些内容,但如果您将其更改为(可能有人会想出更好的方法来更好地使用列表,但是:

List<string[]> list = new List<string[]>() { new string[] {"Other", "0x00"},
                                             new string[] {"Audience chip(eSxxx), "0x3E"}, ... };
List List=new List(){new string[]{“Other”,“0x00”},
新字符串[]{“观众芯片(eSxxx),“0x3E”},…};
然后将静态函数添加到ModelClass:

public class ModelClass
{
    public string I2CDevName { get; set; }
    public string I2CDeviceAddress { get; set; }

    public ModelClass(string DeviceName, string DeviceAddress)
    {
        this.I2CDevName = DeviceName;
        this.I2CDeviceAddress = DeviceAddress;
    }

    //Collection Factory
    public static ObservableCollection<ModelClass> CreateCollection(List<string[]> models)
    {
        ObservableCollection<ModelClass> tmpColl = new ObservableCollection<ModelClass>();
        foreach (string[] s in models)
        {
            tmpColl.Add(new ModelClass(s[0],s[1]));
        }
        return tmpColl;
    }
}
公共类模型类
{
公共字符串I2CDevName{get;set;}
公共字符串I2CDeviceAddress{get;set;}
公共模型类(字符串DeviceName、字符串DeviceAddress)
{
this.I2CDevName=设备名称;
this.I2CDeviceAddress=设备地址;
}
//收集厂
公共静态ObservableCollection CreateCollection(列表模型)
{
ObservableCollection tmpColl=新的ObservableCollection();
foreach(模型中的字符串[]s)
{
tmpColl.Add(新模型类(s[0],s[1]);
}
返回tmpColl;
}
}
然后就跑:

List<string[]> list = new List<string[]>() { new string[] {"Other",...},
                                                                      ...};
public ObservableCollection<ModelClass> _I2CDeviceList = ModelClass.CreateCollection(list);
List List=new List(){new string[]{“Other”,…},
...};
PublicObservableCollection I2CDeviceList=ModelClass.CreateCollection(列表);

Tada…

首先,你提供的这个列表是什么?是代码吗?如果你在谈论我必须添加到列表中的项目,那么我必须告诉你,它不是代码。“其他”,“0x00”分别是devicename和deviceaddress,您可以在构造函数中注意到。实际上,我理解它不是以这种方式编码的,我的意思是更像是如果它已经是一个变量或什么的,或者如果它是从excel表、数据表或VS项目之外的东西中获取的。首先,您提供的这个列表是什么代码?如果你说的是我必须添加到列表中的项目,那么我必须告诉你这不是代码。“其他”,“0x00”分别是devicename和deviceaddress,您可以在构造函数中注意到。实际上,我理解它不是以这种方式编码的,我的意思是更像是如果它已经是一个变量或什么的,或者如果它是从excel工作表、数据表或VS项目之外的其他内容中获取的,那么它是同一个你在说abt:)先用列表的一小部分试试,如果不起作用就返回。我添加了你提到的代码。但是“public observeCollection _I2CDeviceList=ModelClass.CreateCollection(list);”给了我一个错误,“list”不存在。我已在构造函数中添加了列表代码。好的,列表应放置在与创建_I2CDeviceList相同的位置,而不是在构造函数中。是的,在构造函数外部添加了_I2CDeviceList和list。错误:“A”