如何将xml绑定到datagrid组合框

时间:2017-07-05 01:44:15

标签: c# xml wpf combobox datagrid

我有一个wpf项目,用于将xml绑定到datagrid,如下所示:

<DataGrid Name="dgCommunication" ItemsSource="{Binding CommunicationsView}" FontSize="14" CanUserResizeColumns="False" BorderThickness="5" AutoGenerateColumns="False" Margin="10,10,10,15" Background="White">
    <DataGrid.Columns>
         <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="MaxValue" Binding="{Binding MaxValue}" IsReadOnly="True"/>
         <DataGridTextColumn Header="MinValue" Binding="{Binding MinValue}" IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>

和xml文件:

<NewDataSet>
   <Communications>
      <ModelNumber>0x01</ModelNumber>
      <ParamName>BaudRate</ParamName>
      <ParamValue>19200</ParamValue>
      <DefaultValue>19200</DefaultValue>
      <MaxValue></MaxValue>
      <MinValue></MinValue>
   </Communications>
   <Communications>
      <ModelNumber>0x01</ModelNumber>
      <ParamName>Parity</ParamName>
      <ParamValue>None</ParamValue>
      <DefaultValue>None</DefaultValue>
      <MaxValue></MaxValue>
      <MinValue></MinValue>
   </Communications>
   <Communications>
      <ModelNumber>0x01</ModelNumber>
      <ParamName>StopBit</ParamName>
      <ParamValue>1</ParamValue>
      <DefaultValue>1</DefaultValue>
      <MaxValue></MaxValue>
      <MinValue></MinValue>
   </Communications>
   <Communications>
      <ModelNumber>0x01</ModelNumber>
      <ParamName>DataBit</ParamName>
      <ParamValue>8</ParamValue>
      <DefaultValue>8</DefaultValue>
      <MaxValue></MaxValue>
      <MinValue></MinValue>
   </Communications>
   <Communications>
      <ModelNumber>0x01</ModelNumber>
      <ParamName>SlaveAddress</ParamName>
      <ParamValue>1</ParamValue>
      <DefaultValue>1</DefaultValue>
      <MaxValue>247</MaxValue>
      <MinValue>1</MinValue>
   </Communications>
   <Communications>
      <ModelNumber>0x01</ModelNumber>
      <ParamName>IP_Address</ParamName>
      <ParamValue>192.168.0.1</ParamValue>
      <DefaultValue>192.168.0.1</DefaultValue>
      <MaxValue></MaxValue>
      <MinValue></MinValue>
   </Communications>
   <Communications>
      <ModelNumber>0x01</ModelNumber>
      <ParamName>IP_Port</ParamName>
      <ParamValue>502</ParamValue>
      <DefaultValue>502</DefaultValue>
      <MaxValue></MaxValue>
      <MinValue></MinValue>
   </Communications>
</NewDataSet>

这很好用。但现在我必须将部分DataGridTextColumn更改为ComboBox,以BaudRate为例,我可以将xml更改为:

<NewDataSet>
    <Communications>
        <ModelNumber>0x01</ModelNumber>
        <ParamName>BaudRate</ParamName>
        <ParamValues>
            <ParamValue>9600</ParamValue>
            <ParamValue>19200</ParamValue>
            <ParamValue>115200</ParamValue>
        </ParamValues>
        <DefaultValue>502</DefaultValue>
        <MaxValue></MaxValue>
        <MinValue></MinValue>
    </Communications>
</NewDataSet>

我该如何做到这一点?提前感谢!

1 个答案:

答案 0 :(得分:0)

如果您将ParamValues保存为列表并使用DataGridComboBoxColumn

通过使用MVVM-Model,XML-Docuemnt将成为数据库,您必须构建一个带有logik的模型,该模型将对对象进行buitl。 Viewmodel将使用Modeldata,如果我认为是正确的,你可以使用绑定到ParamValues。

 <DataGridComboBoxColumn Header="Values" ItemsSource="{Binding ParamValues, Mode=TwoWay}" SelectedItemBinding="{Binding SelectedParamValue, Mode=TwoWay}"/>