0

Devicename と DeviceAddress の 2 つの列を持つリストビューがあります。リストビューの監視可能なコレクションを維持しています。私は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>

I2CDevicenameI2CDeviceAddressの両方がモデル クラスの一部です。

ビューモデル:

public ObservableCollection<ModelClass> I2CDeviceList
    {
        get { return _I2CDeviceList; }
        set
        {
            _I2CDeviceList = value;
            NotifyPropertyChanged("I2CDeviceList");
        }
    }

DeviceName と 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")},.......

ビューモデル クラスのコンストラクターで、次のように obs.Coll 内にアイテムを追加できます。

public ObservableCollection<ModelClass> _I2CDeviceList = new ObservableCollection<ModelClass>()
        {                
            new ModelClass() {I2CDevName = "Other", I2CDeviceAddress= "0x00"},
            new ModelClass() {I2CDevName = "TI Codec", I2CDeviceAddress = "0x18"},  .........             
        };

しかし、15 個の項目を追加するのは面倒な作業であり、15 個の項目のステートメントを作成することになります。多くのステートメントを避けるために、単一のループを使用してアイテムを追加する方法はありますか?

4

1 に答える 1

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"), .......
};

または、リスト全体を取り、ObservableCollection全体を返すModelClassの静的関数である「ファクトリー」を作成できます

したがって、あなたが持っているリストのいくつかを変更する必要がありますが、それを次のように変更すると (おそらく誰かがリストをより適切に使用するためのより良いアイデアを思い付くことができますが:

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);

多田...

于 2012-09-28T07:00:55.943 に答える