我有一个包含两列Devicename和DeviceAddress的列表视图。我为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>
I2CDevicename 和 I2CDeviceAddress 都是我的模型类的一部分。
视图模型:
public ObservableCollection<ModelClass> I2CDeviceList
{
get { return _I2CDeviceList; }
set
{
_I2CDeviceList = value;
NotifyPropertyChanged("I2CDeviceList");
}
}
要在DeviceName&amp;中添加的项目DeviceAddress分别为:
{ T("Other"), T("0x00")},
{ T("TI Codec(TLV320AIC3104)"), T("0x18")},
{ T("Chip ID GPIO(PCA9500)"),T("0x20")},
{ T("GPIO - power rail control(PCA9555DB)"),T("0x24")},
{ T("Digital Potentiometer(AD5252)"),T("0x2C")},
{ T("Audience chip(eSxxx)"),T("0x3E")},
{ T("Spartan 3A FPGA(XC3SD3400A)"),T("0x40")},.......
现在在viewmodel类的构造函数中,我可以在obs.Coll中添加项目,如下所示:
public ObservableCollection<ModelClass> _I2CDeviceList = new ObservableCollection<ModelClass>()
{
new ModelClass() {I2CDevName = "Other", I2CDeviceAddress= "0x00"},
new ModelClass() {I2CDevName = "TI Codec", I2CDeviceAddress = "0x18"}, .........
};
但添加15个项目是一项繁琐的工作,最终我有15个项目的陈述。他们是否可以使用单个循环添加项目以避免许多陈述?
答案 0 :(得分:4)
因此,要么为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"), .......
};
或者你可以创建一个“工厂”,一个ModelClass中的静态函数,它接受一个完整的列表并返回一个完整的ObservableCollection
所以你必须改变你所拥有的列表中的一些,但是如果你改变了类似的东西(也许有人可以想出更好的想法来更好地使用列表,但是:
List<string[]> list = new List<string[]>() { new string[] {"Other", "0x00"},
new string[] {"Audience chip(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;
}
}
然后运行:
List<string[]> list = new List<string[]>() { new string[] {"Other",...},
...};
public ObservableCollection<ModelClass> _I2CDeviceList = ModelClass.CreateCollection(list);
...多田