如何解析xml数据?

时间:2017-07-11 10:15:51

标签: c# xml wpf datagrid dataset

我有一个WPF项目将我的datagrid绑定到数据集xml,如下所示:

XAML:

<DataGrid Name="dgConfig" AutoGenerateColumns="False" ItemsSource="{Binding ModulesView}" >
    <DataGrid.Columns>
         <DataGridTextColumn Header="ModelNumber" Binding="{Binding ModelNumber}" IsReadOnly="True"  />
         <DataGridTextColumn Header="ParamName" Binding="{Binding ParamName}" IsReadOnly="True"/>
         <DataGridTextColumn Header="ParamValue" Binding="{Binding ParamValues, Mode=TwoWay}" />
         <DataGridTextColumn Header="DefaultValue" Binding="{Binding DefaultValue}" IsReadOnly="True"/>
         <DataGridTextColumn Header="Address" Binding="{Binding Address}" IsReadOnly="True"/>
         <DataGridTextColumn Header="LowHigh" Binding="{Binding LowHigh}" IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>

视图模型:

    public ICollectionView ModulesView
    {
        get
        {
            if (_ModulesView == null)
                RefreshModule();
            return _ModulesView;
        }
        set
        {
            _ModulesView = value;
            NotifyPropertyChanged();
        }
    }

    private void RefreshModule()
    {
        ModulesView = new ListCollectionView(sdb.GetModules())
        {
            Filter = obj =>
            {
                var modules = (Module)obj;
                return SelectedProduct != null && Product.ModelNumber == SelectedProduct.ModelNumber;
            }
        };
    }

XML:

  <Modules>
     <ModelNumber>1</ModelNumber>
     <ParamName>I00-I07 Logic</ParamName>
     <ParamValue>1</ParamValue>
     <DefaultValue>1</DefaultValue>
     <Address>41301</Address>
     <LowHigh>0</LowHigh>
 </Modules>
 <Modules>
     <ModelNumber>1</ModelNumber>
     <ParamName>I10-I17 Logic</ParamName>
     <ParamValue>10</ParamValue>
     <DefaultValue>10</DefaultValue>
     <Address>41301</Address>
     <LowHigh>1</LowHigh>
 </Modules>

数据集:

    public ObservableCollection<Module> GetModules()
    {
        DataSet ds = StoreDbDataSet.ReadDataSet();
        ObservableCollection<Module> modules = new ObservableCollection<Module>();
        foreach (DataRow moduleRow in ds.Tables["Modules"].Rows)
        {
            modules.Add(new Module((UInt16)moduleRow["ModelNumber"], moduleRow["ParamName"].ToString(),
                    (UInt16)moduleRow["ParamValue"], (UInt16)moduleRow["DefaultValue"],(UInt16)moduleRow["Address"],
                    (Boolean)moduleRow["LowHigh"]));
        }
        return modules;
    }

现在我遇到了新问题,我必须按AddressLowHigh解析xml数据,例如:Address 41301 是一个ushort类型,我必须将其解析为8位(LowHigh == 0表示低字节LowHigh == 1表示高字节),我想向datagrid显示每一位数据,我花了几天时间这个没有想法,你能告诉我怎么做吗?我很感激任何建议。非常感谢!

1 个答案:

答案 0 :(得分:0)

好的,首先你可以使用BitConverter将UInt16转换为字节,或者通过移动位和here转换来手动转换。

然后您可以使用BitArray将字节转换为单个位(如果这是您需要的)或再次手动转换。

如果您希望8列各自显示一个单独的位,则向Module类添加8个只读属性,每个属性输出一个单独的位,并将每个属性绑定到一列。

如果我误解了这个问题,请告诉我,我会进一步澄清。