Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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
将文本框值添加到wpf中的datagrid行_Wpf_Mvvm_Datagrid_Textbox - Fatal编程技术网

将文本框值添加到wpf中的datagrid行

将文本框值添加到wpf中的datagrid行,wpf,mvvm,datagrid,textbox,Wpf,Mvvm,Datagrid,Textbox,我正在用MVVM模式开发一个WPF应用程序 <Grid Height="444" Width="486"> <Label Content="Script" Height="28" HorizontalAlignment="Left" Margin="13,36,0,0" Name="lblScript" VerticalAlignment="Top" /> <TextBox Height="142" HorizontalAlignment="Left

我正在用MVVM模式开发一个WPF应用程序

<Grid Height="444" Width="486">
    <Label Content="Script" Height="28" HorizontalAlignment="Left" Margin="13,36,0,0" Name="lblScript" VerticalAlignment="Top" />
    <TextBox Height="142" HorizontalAlignment="Left" Margin="75,38,0,0" Name="txtScript" VerticalAlignment="Top" Width="380"  Text="{Binding Script_Text}"/>
    <Button Content="Add"  Command="{Binding SaveData}"  Height="23" HorizontalAlignment="Left" Margin="284,409,0,0" Name="btnSave" VerticalAlignment="Top" Width="75" />
    <Button Content="Reset"  Command="{Binding ClearData}" Height="23" HorizontalAlignment="Left" Margin="380,409,0,0" Name="btnReset" VerticalAlignment="Top" Width="75" />

    <DataGrid  ItemsSource="{Binding Path=Param}" HeadersVisibility="Column" SelectionMode="Single" 
               AlternatingRowBackground="Gainsboro" Background="White" AutoGenerateColumns="False" 
               ItemContainerStyle="{StaticResource itemstyle}" CanUserAddRows="True" GridLinesVisibility="None" 
               Height="150" HorizontalAlignment="Left" HorizontalContentAlignment="Left"  IsEnabled="True" 
               IsReadOnly="True"   Margin="75,200,0,0" Name="dgMain" RowHeight="23" VerticalAlignment="Center" 
               VerticalContentAlignment="Center"  Width="380" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <i:InvokeCommandAction Command="{Binding EditData}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Name}" Header="Parameter" Width="140" />
            <DataGridTextColumn Binding="{Binding Path=Type}" Header="Type" Width="100" />
            <DataGridTextColumn Binding="{Binding Path=Value}" Header="Value" Width="120" />
        </DataGrid.Columns>

    </DataGrid>
    <Label Content="Name" Height="28" HorizontalAlignment="Left" Margin="75,186,0,0" Name="lblName" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Name, ElementName=dgMain}" HorizontalAlignment="Left" Margin="75,213,0,0" Name="txtName" VerticalAlignment="Top" Width="110" />
    <Label Content="Type" Height="28" HorizontalAlignment="Left" Margin="191,186,0,0" Name="lblType" VerticalAlignment="Top" />
    <ComboBox Height="23" Text="{Binding SelectedItem.Type, ElementName=dgMain}" HorizontalAlignment="Left" Margin="191,213,0,0" Name="cboType" VerticalAlignment="Top" Width="110" ItemsSource="{Binding}">
        <ComboBoxItem Content="integer" />
        <ComboBoxItem Content="double" />
        <ComboBoxItem Content="string" />
    </ComboBox>
    <Label Content="Value" Height="28" HorizontalAlignment="Left" Margin="307,186,0,0" Name="lblValue" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Value, ElementName=dgMain}"   HorizontalAlignment="Left" Margin="307,213,0,0" Name="textBox1" VerticalAlignment="Top" Width="110" />

    <TextBlock HorizontalAlignment="Left" Margin="428,15,0,0" Height="32">
            <ToggleButton  x:Name="Add" Focusable="False" Command ="{Binding AddNew}" Style="{StaticResource SMToggle}" >
                <Image Source="/Image/Add.png"  Width="16" Height="16" />
            </ToggleButton>
    </TextBlock>
</Grid>
我将数据填充到gridview,在选择时,我填充到textbox和combobox以编辑内容。然后保存数据

<Grid Height="444" Width="486">
    <Label Content="Script" Height="28" HorizontalAlignment="Left" Margin="13,36,0,0" Name="lblScript" VerticalAlignment="Top" />
    <TextBox Height="142" HorizontalAlignment="Left" Margin="75,38,0,0" Name="txtScript" VerticalAlignment="Top" Width="380"  Text="{Binding Script_Text}"/>
    <Button Content="Add"  Command="{Binding SaveData}"  Height="23" HorizontalAlignment="Left" Margin="284,409,0,0" Name="btnSave" VerticalAlignment="Top" Width="75" />
    <Button Content="Reset"  Command="{Binding ClearData}" Height="23" HorizontalAlignment="Left" Margin="380,409,0,0" Name="btnReset" VerticalAlignment="Top" Width="75" />

    <DataGrid  ItemsSource="{Binding Path=Param}" HeadersVisibility="Column" SelectionMode="Single" 
               AlternatingRowBackground="Gainsboro" Background="White" AutoGenerateColumns="False" 
               ItemContainerStyle="{StaticResource itemstyle}" CanUserAddRows="True" GridLinesVisibility="None" 
               Height="150" HorizontalAlignment="Left" HorizontalContentAlignment="Left"  IsEnabled="True" 
               IsReadOnly="True"   Margin="75,200,0,0" Name="dgMain" RowHeight="23" VerticalAlignment="Center" 
               VerticalContentAlignment="Center"  Width="380" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <i:InvokeCommandAction Command="{Binding EditData}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Name}" Header="Parameter" Width="140" />
            <DataGridTextColumn Binding="{Binding Path=Type}" Header="Type" Width="100" />
            <DataGridTextColumn Binding="{Binding Path=Value}" Header="Value" Width="120" />
        </DataGrid.Columns>

    </DataGrid>
    <Label Content="Name" Height="28" HorizontalAlignment="Left" Margin="75,186,0,0" Name="lblName" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Name, ElementName=dgMain}" HorizontalAlignment="Left" Margin="75,213,0,0" Name="txtName" VerticalAlignment="Top" Width="110" />
    <Label Content="Type" Height="28" HorizontalAlignment="Left" Margin="191,186,0,0" Name="lblType" VerticalAlignment="Top" />
    <ComboBox Height="23" Text="{Binding SelectedItem.Type, ElementName=dgMain}" HorizontalAlignment="Left" Margin="191,213,0,0" Name="cboType" VerticalAlignment="Top" Width="110" ItemsSource="{Binding}">
        <ComboBoxItem Content="integer" />
        <ComboBoxItem Content="double" />
        <ComboBoxItem Content="string" />
    </ComboBox>
    <Label Content="Value" Height="28" HorizontalAlignment="Left" Margin="307,186,0,0" Name="lblValue" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Value, ElementName=dgMain}"   HorizontalAlignment="Left" Margin="307,213,0,0" Name="textBox1" VerticalAlignment="Top" Width="110" />

    <TextBlock HorizontalAlignment="Left" Margin="428,15,0,0" Height="32">
            <ToggleButton  x:Name="Add" Focusable="False" Command ="{Binding AddNew}" Style="{StaticResource SMToggle}" >
                <Image Source="/Image/Add.png"  Width="16" Height="16" />
            </ToggleButton>
    </TextBlock>
</Grid>
现在我想向网格视图添加新数据。 用户输入到文本框,组合框应添加到网格视图和我需要保存到数据库

<Grid Height="444" Width="486">
    <Label Content="Script" Height="28" HorizontalAlignment="Left" Margin="13,36,0,0" Name="lblScript" VerticalAlignment="Top" />
    <TextBox Height="142" HorizontalAlignment="Left" Margin="75,38,0,0" Name="txtScript" VerticalAlignment="Top" Width="380"  Text="{Binding Script_Text}"/>
    <Button Content="Add"  Command="{Binding SaveData}"  Height="23" HorizontalAlignment="Left" Margin="284,409,0,0" Name="btnSave" VerticalAlignment="Top" Width="75" />
    <Button Content="Reset"  Command="{Binding ClearData}" Height="23" HorizontalAlignment="Left" Margin="380,409,0,0" Name="btnReset" VerticalAlignment="Top" Width="75" />

    <DataGrid  ItemsSource="{Binding Path=Param}" HeadersVisibility="Column" SelectionMode="Single" 
               AlternatingRowBackground="Gainsboro" Background="White" AutoGenerateColumns="False" 
               ItemContainerStyle="{StaticResource itemstyle}" CanUserAddRows="True" GridLinesVisibility="None" 
               Height="150" HorizontalAlignment="Left" HorizontalContentAlignment="Left"  IsEnabled="True" 
               IsReadOnly="True"   Margin="75,200,0,0" Name="dgMain" RowHeight="23" VerticalAlignment="Center" 
               VerticalContentAlignment="Center"  Width="380" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <i:InvokeCommandAction Command="{Binding EditData}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Name}" Header="Parameter" Width="140" />
            <DataGridTextColumn Binding="{Binding Path=Type}" Header="Type" Width="100" />
            <DataGridTextColumn Binding="{Binding Path=Value}" Header="Value" Width="120" />
        </DataGrid.Columns>

    </DataGrid>
    <Label Content="Name" Height="28" HorizontalAlignment="Left" Margin="75,186,0,0" Name="lblName" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Name, ElementName=dgMain}" HorizontalAlignment="Left" Margin="75,213,0,0" Name="txtName" VerticalAlignment="Top" Width="110" />
    <Label Content="Type" Height="28" HorizontalAlignment="Left" Margin="191,186,0,0" Name="lblType" VerticalAlignment="Top" />
    <ComboBox Height="23" Text="{Binding SelectedItem.Type, ElementName=dgMain}" HorizontalAlignment="Left" Margin="191,213,0,0" Name="cboType" VerticalAlignment="Top" Width="110" ItemsSource="{Binding}">
        <ComboBoxItem Content="integer" />
        <ComboBoxItem Content="double" />
        <ComboBoxItem Content="string" />
    </ComboBox>
    <Label Content="Value" Height="28" HorizontalAlignment="Left" Margin="307,186,0,0" Name="lblValue" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Value, ElementName=dgMain}"   HorizontalAlignment="Left" Margin="307,213,0,0" Name="textBox1" VerticalAlignment="Top" Width="110" />

    <TextBlock HorizontalAlignment="Left" Margin="428,15,0,0" Height="32">
            <ToggleButton  x:Name="Add" Focusable="False" Command ="{Binding AddNew}" Style="{StaticResource SMToggle}" >
                <Image Source="/Image/Add.png"  Width="16" Height="16" />
            </ToggleButton>
    </TextBlock>
</Grid>
我的XMAL如下所示:

<Grid Height="444" Width="486">
    <Label Content="Script" Height="28" HorizontalAlignment="Left" Margin="13,36,0,0" Name="lblScript" VerticalAlignment="Top" />
    <TextBox Height="142" HorizontalAlignment="Left" Margin="75,38,0,0" Name="txtScript" VerticalAlignment="Top" Width="380"  Text="{Binding Script_Text}"/>
    <Button Content="Add"  Command="{Binding SaveData}"  Height="23" HorizontalAlignment="Left" Margin="284,409,0,0" Name="btnSave" VerticalAlignment="Top" Width="75" />
    <Button Content="Reset"  Command="{Binding ClearData}" Height="23" HorizontalAlignment="Left" Margin="380,409,0,0" Name="btnReset" VerticalAlignment="Top" Width="75" />

    <DataGrid  ItemsSource="{Binding Path=Param}" HeadersVisibility="Column" SelectionMode="Single" 
               AlternatingRowBackground="Gainsboro" Background="White" AutoGenerateColumns="False" 
               ItemContainerStyle="{StaticResource itemstyle}" CanUserAddRows="True" GridLinesVisibility="None" 
               Height="150" HorizontalAlignment="Left" HorizontalContentAlignment="Left"  IsEnabled="True" 
               IsReadOnly="True"   Margin="75,200,0,0" Name="dgMain" RowHeight="23" VerticalAlignment="Center" 
               VerticalContentAlignment="Center"  Width="380" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <i:InvokeCommandAction Command="{Binding EditData}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Name}" Header="Parameter" Width="140" />
            <DataGridTextColumn Binding="{Binding Path=Type}" Header="Type" Width="100" />
            <DataGridTextColumn Binding="{Binding Path=Value}" Header="Value" Width="120" />
        </DataGrid.Columns>

    </DataGrid>
    <Label Content="Name" Height="28" HorizontalAlignment="Left" Margin="75,186,0,0" Name="lblName" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Name, ElementName=dgMain}" HorizontalAlignment="Left" Margin="75,213,0,0" Name="txtName" VerticalAlignment="Top" Width="110" />
    <Label Content="Type" Height="28" HorizontalAlignment="Left" Margin="191,186,0,0" Name="lblType" VerticalAlignment="Top" />
    <ComboBox Height="23" Text="{Binding SelectedItem.Type, ElementName=dgMain}" HorizontalAlignment="Left" Margin="191,213,0,0" Name="cboType" VerticalAlignment="Top" Width="110" ItemsSource="{Binding}">
        <ComboBoxItem Content="integer" />
        <ComboBoxItem Content="double" />
        <ComboBoxItem Content="string" />
    </ComboBox>
    <Label Content="Value" Height="28" HorizontalAlignment="Left" Margin="307,186,0,0" Name="lblValue" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Value, ElementName=dgMain}"   HorizontalAlignment="Left" Margin="307,213,0,0" Name="textBox1" VerticalAlignment="Top" Width="110" />

    <TextBlock HorizontalAlignment="Left" Margin="428,15,0,0" Height="32">
            <ToggleButton  x:Name="Add" Focusable="False" Command ="{Binding AddNew}" Style="{StaticResource SMToggle}" >
                <Image Source="/Image/Add.png"  Width="16" Height="16" />
            </ToggleButton>
    </TextBlock>
</Grid>

请帮帮我。
SN

假设您正确地使用了MVVM,并且
Param
属性是一个集合,并且
SelectedItem
属性与集合中的项目类型相同,那么您应该能够在视图模型中的
SaveData
命令中执行此操作:

<Grid Height="444" Width="486">
    <Label Content="Script" Height="28" HorizontalAlignment="Left" Margin="13,36,0,0" Name="lblScript" VerticalAlignment="Top" />
    <TextBox Height="142" HorizontalAlignment="Left" Margin="75,38,0,0" Name="txtScript" VerticalAlignment="Top" Width="380"  Text="{Binding Script_Text}"/>
    <Button Content="Add"  Command="{Binding SaveData}"  Height="23" HorizontalAlignment="Left" Margin="284,409,0,0" Name="btnSave" VerticalAlignment="Top" Width="75" />
    <Button Content="Reset"  Command="{Binding ClearData}" Height="23" HorizontalAlignment="Left" Margin="380,409,0,0" Name="btnReset" VerticalAlignment="Top" Width="75" />

    <DataGrid  ItemsSource="{Binding Path=Param}" HeadersVisibility="Column" SelectionMode="Single" 
               AlternatingRowBackground="Gainsboro" Background="White" AutoGenerateColumns="False" 
               ItemContainerStyle="{StaticResource itemstyle}" CanUserAddRows="True" GridLinesVisibility="None" 
               Height="150" HorizontalAlignment="Left" HorizontalContentAlignment="Left"  IsEnabled="True" 
               IsReadOnly="True"   Margin="75,200,0,0" Name="dgMain" RowHeight="23" VerticalAlignment="Center" 
               VerticalContentAlignment="Center"  Width="380" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <i:InvokeCommandAction Command="{Binding EditData}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Name}" Header="Parameter" Width="140" />
            <DataGridTextColumn Binding="{Binding Path=Type}" Header="Type" Width="100" />
            <DataGridTextColumn Binding="{Binding Path=Value}" Header="Value" Width="120" />
        </DataGrid.Columns>

    </DataGrid>
    <Label Content="Name" Height="28" HorizontalAlignment="Left" Margin="75,186,0,0" Name="lblName" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Name, ElementName=dgMain}" HorizontalAlignment="Left" Margin="75,213,0,0" Name="txtName" VerticalAlignment="Top" Width="110" />
    <Label Content="Type" Height="28" HorizontalAlignment="Left" Margin="191,186,0,0" Name="lblType" VerticalAlignment="Top" />
    <ComboBox Height="23" Text="{Binding SelectedItem.Type, ElementName=dgMain}" HorizontalAlignment="Left" Margin="191,213,0,0" Name="cboType" VerticalAlignment="Top" Width="110" ItemsSource="{Binding}">
        <ComboBoxItem Content="integer" />
        <ComboBoxItem Content="double" />
        <ComboBoxItem Content="string" />
    </ComboBox>
    <Label Content="Value" Height="28" HorizontalAlignment="Left" Margin="307,186,0,0" Name="lblValue" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Value, ElementName=dgMain}"   HorizontalAlignment="Left" Margin="307,213,0,0" Name="textBox1" VerticalAlignment="Top" Width="110" />

    <TextBlock HorizontalAlignment="Left" Margin="428,15,0,0" Height="32">
            <ToggleButton  x:Name="Add" Focusable="False" Command ="{Binding AddNew}" Style="{StaticResource SMToggle}" >
                <Image Source="/Image/Add.png"  Width="16" Height="16" />
            </ToggleButton>
    </TextBlock>
</Grid>
Param.Add(SelectedItem);

如果您使用的是MVVM,那么不要将TextBox/ComboBox直接绑定到datagrid,而是将它们绑定到ViewModel中Parameter类型的属性(例如,
public Parameter DisplayedParameter{get;set;}
)。然后支持文本框/组合框的两种模式-添加和编辑

<Grid Height="444" Width="486">
    <Label Content="Script" Height="28" HorizontalAlignment="Left" Margin="13,36,0,0" Name="lblScript" VerticalAlignment="Top" />
    <TextBox Height="142" HorizontalAlignment="Left" Margin="75,38,0,0" Name="txtScript" VerticalAlignment="Top" Width="380"  Text="{Binding Script_Text}"/>
    <Button Content="Add"  Command="{Binding SaveData}"  Height="23" HorizontalAlignment="Left" Margin="284,409,0,0" Name="btnSave" VerticalAlignment="Top" Width="75" />
    <Button Content="Reset"  Command="{Binding ClearData}" Height="23" HorizontalAlignment="Left" Margin="380,409,0,0" Name="btnReset" VerticalAlignment="Top" Width="75" />

    <DataGrid  ItemsSource="{Binding Path=Param}" HeadersVisibility="Column" SelectionMode="Single" 
               AlternatingRowBackground="Gainsboro" Background="White" AutoGenerateColumns="False" 
               ItemContainerStyle="{StaticResource itemstyle}" CanUserAddRows="True" GridLinesVisibility="None" 
               Height="150" HorizontalAlignment="Left" HorizontalContentAlignment="Left"  IsEnabled="True" 
               IsReadOnly="True"   Margin="75,200,0,0" Name="dgMain" RowHeight="23" VerticalAlignment="Center" 
               VerticalContentAlignment="Center"  Width="380" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <i:InvokeCommandAction Command="{Binding EditData}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Name}" Header="Parameter" Width="140" />
            <DataGridTextColumn Binding="{Binding Path=Type}" Header="Type" Width="100" />
            <DataGridTextColumn Binding="{Binding Path=Value}" Header="Value" Width="120" />
        </DataGrid.Columns>

    </DataGrid>
    <Label Content="Name" Height="28" HorizontalAlignment="Left" Margin="75,186,0,0" Name="lblName" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Name, ElementName=dgMain}" HorizontalAlignment="Left" Margin="75,213,0,0" Name="txtName" VerticalAlignment="Top" Width="110" />
    <Label Content="Type" Height="28" HorizontalAlignment="Left" Margin="191,186,0,0" Name="lblType" VerticalAlignment="Top" />
    <ComboBox Height="23" Text="{Binding SelectedItem.Type, ElementName=dgMain}" HorizontalAlignment="Left" Margin="191,213,0,0" Name="cboType" VerticalAlignment="Top" Width="110" ItemsSource="{Binding}">
        <ComboBoxItem Content="integer" />
        <ComboBoxItem Content="double" />
        <ComboBoxItem Content="string" />
    </ComboBox>
    <Label Content="Value" Height="28" HorizontalAlignment="Left" Margin="307,186,0,0" Name="lblValue" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Value, ElementName=dgMain}"   HorizontalAlignment="Left" Margin="307,213,0,0" Name="textBox1" VerticalAlignment="Top" Width="110" />

    <TextBlock HorizontalAlignment="Left" Margin="428,15,0,0" Height="32">
            <ToggleButton  x:Name="Add" Focusable="False" Command ="{Binding AddNew}" Style="{StaticResource SMToggle}" >
                <Image Source="/Image/Add.png"  Width="16" Height="16" />
            </ToggleButton>
    </TextBlock>
</Grid>
在添加模式下,只需将DisplayedParameter设置为Parameter的新实例。单击Save按钮,将参数保存到后端,并刷新Param属性的值(我假设它是参数的List/ObservableCollection)。或者,将参数添加到参数列表中,然后将参数保存到后端

<Grid Height="444" Width="486">
    <Label Content="Script" Height="28" HorizontalAlignment="Left" Margin="13,36,0,0" Name="lblScript" VerticalAlignment="Top" />
    <TextBox Height="142" HorizontalAlignment="Left" Margin="75,38,0,0" Name="txtScript" VerticalAlignment="Top" Width="380"  Text="{Binding Script_Text}"/>
    <Button Content="Add"  Command="{Binding SaveData}"  Height="23" HorizontalAlignment="Left" Margin="284,409,0,0" Name="btnSave" VerticalAlignment="Top" Width="75" />
    <Button Content="Reset"  Command="{Binding ClearData}" Height="23" HorizontalAlignment="Left" Margin="380,409,0,0" Name="btnReset" VerticalAlignment="Top" Width="75" />

    <DataGrid  ItemsSource="{Binding Path=Param}" HeadersVisibility="Column" SelectionMode="Single" 
               AlternatingRowBackground="Gainsboro" Background="White" AutoGenerateColumns="False" 
               ItemContainerStyle="{StaticResource itemstyle}" CanUserAddRows="True" GridLinesVisibility="None" 
               Height="150" HorizontalAlignment="Left" HorizontalContentAlignment="Left"  IsEnabled="True" 
               IsReadOnly="True"   Margin="75,200,0,0" Name="dgMain" RowHeight="23" VerticalAlignment="Center" 
               VerticalContentAlignment="Center"  Width="380" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <i:InvokeCommandAction Command="{Binding EditData}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Name}" Header="Parameter" Width="140" />
            <DataGridTextColumn Binding="{Binding Path=Type}" Header="Type" Width="100" />
            <DataGridTextColumn Binding="{Binding Path=Value}" Header="Value" Width="120" />
        </DataGrid.Columns>

    </DataGrid>
    <Label Content="Name" Height="28" HorizontalAlignment="Left" Margin="75,186,0,0" Name="lblName" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Name, ElementName=dgMain}" HorizontalAlignment="Left" Margin="75,213,0,0" Name="txtName" VerticalAlignment="Top" Width="110" />
    <Label Content="Type" Height="28" HorizontalAlignment="Left" Margin="191,186,0,0" Name="lblType" VerticalAlignment="Top" />
    <ComboBox Height="23" Text="{Binding SelectedItem.Type, ElementName=dgMain}" HorizontalAlignment="Left" Margin="191,213,0,0" Name="cboType" VerticalAlignment="Top" Width="110" ItemsSource="{Binding}">
        <ComboBoxItem Content="integer" />
        <ComboBoxItem Content="double" />
        <ComboBoxItem Content="string" />
    </ComboBox>
    <Label Content="Value" Height="28" HorizontalAlignment="Left" Margin="307,186,0,0" Name="lblValue" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Value, ElementName=dgMain}"   HorizontalAlignment="Left" Margin="307,213,0,0" Name="textBox1" VerticalAlignment="Top" Width="110" />

    <TextBlock HorizontalAlignment="Left" Margin="428,15,0,0" Height="32">
            <ToggleButton  x:Name="Add" Focusable="False" Command ="{Binding AddNew}" Style="{StaticResource SMToggle}" >
                <Image Source="/Image/Add.png"  Width="16" Height="16" />
            </ToggleButton>
    </TextBlock>
</Grid>
在编辑模式下,只需将DisplayedParameter设置为SelectedItem的值(您还需要SelectedItem的viewmodel属性)。单击Save(保存),您可以在后端保存编辑的参数并刷新参数

<Grid Height="444" Width="486">
    <Label Content="Script" Height="28" HorizontalAlignment="Left" Margin="13,36,0,0" Name="lblScript" VerticalAlignment="Top" />
    <TextBox Height="142" HorizontalAlignment="Left" Margin="75,38,0,0" Name="txtScript" VerticalAlignment="Top" Width="380"  Text="{Binding Script_Text}"/>
    <Button Content="Add"  Command="{Binding SaveData}"  Height="23" HorizontalAlignment="Left" Margin="284,409,0,0" Name="btnSave" VerticalAlignment="Top" Width="75" />
    <Button Content="Reset"  Command="{Binding ClearData}" Height="23" HorizontalAlignment="Left" Margin="380,409,0,0" Name="btnReset" VerticalAlignment="Top" Width="75" />

    <DataGrid  ItemsSource="{Binding Path=Param}" HeadersVisibility="Column" SelectionMode="Single" 
               AlternatingRowBackground="Gainsboro" Background="White" AutoGenerateColumns="False" 
               ItemContainerStyle="{StaticResource itemstyle}" CanUserAddRows="True" GridLinesVisibility="None" 
               Height="150" HorizontalAlignment="Left" HorizontalContentAlignment="Left"  IsEnabled="True" 
               IsReadOnly="True"   Margin="75,200,0,0" Name="dgMain" RowHeight="23" VerticalAlignment="Center" 
               VerticalContentAlignment="Center"  Width="380" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <i:InvokeCommandAction Command="{Binding EditData}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Name}" Header="Parameter" Width="140" />
            <DataGridTextColumn Binding="{Binding Path=Type}" Header="Type" Width="100" />
            <DataGridTextColumn Binding="{Binding Path=Value}" Header="Value" Width="120" />
        </DataGrid.Columns>

    </DataGrid>
    <Label Content="Name" Height="28" HorizontalAlignment="Left" Margin="75,186,0,0" Name="lblName" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Name, ElementName=dgMain}" HorizontalAlignment="Left" Margin="75,213,0,0" Name="txtName" VerticalAlignment="Top" Width="110" />
    <Label Content="Type" Height="28" HorizontalAlignment="Left" Margin="191,186,0,0" Name="lblType" VerticalAlignment="Top" />
    <ComboBox Height="23" Text="{Binding SelectedItem.Type, ElementName=dgMain}" HorizontalAlignment="Left" Margin="191,213,0,0" Name="cboType" VerticalAlignment="Top" Width="110" ItemsSource="{Binding}">
        <ComboBoxItem Content="integer" />
        <ComboBoxItem Content="double" />
        <ComboBoxItem Content="string" />
    </ComboBox>
    <Label Content="Value" Height="28" HorizontalAlignment="Left" Margin="307,186,0,0" Name="lblValue" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Value, ElementName=dgMain}"   HorizontalAlignment="Left" Margin="307,213,0,0" Name="textBox1" VerticalAlignment="Top" Width="110" />

    <TextBlock HorizontalAlignment="Left" Margin="428,15,0,0" Height="32">
            <ToggleButton  x:Name="Add" Focusable="False" Command ="{Binding AddNew}" Style="{StaticResource SMToggle}" >
                <Image Source="/Image/Add.png"  Width="16" Height="16" />
            </ToggleButton>
    </TextBlock>
</Grid>
请注意,默认情况下,您仍处于添加模式;并且仅当用户请求时才切换到编辑模式(例如,在datagrid中选择项目,或者可能单击datagrid行中的编辑按钮)。完成编辑后(例如,用户保存或取消),您将返回默认模式

<Grid Height="444" Width="486">
    <Label Content="Script" Height="28" HorizontalAlignment="Left" Margin="13,36,0,0" Name="lblScript" VerticalAlignment="Top" />
    <TextBox Height="142" HorizontalAlignment="Left" Margin="75,38,0,0" Name="txtScript" VerticalAlignment="Top" Width="380"  Text="{Binding Script_Text}"/>
    <Button Content="Add"  Command="{Binding SaveData}"  Height="23" HorizontalAlignment="Left" Margin="284,409,0,0" Name="btnSave" VerticalAlignment="Top" Width="75" />
    <Button Content="Reset"  Command="{Binding ClearData}" Height="23" HorizontalAlignment="Left" Margin="380,409,0,0" Name="btnReset" VerticalAlignment="Top" Width="75" />

    <DataGrid  ItemsSource="{Binding Path=Param}" HeadersVisibility="Column" SelectionMode="Single" 
               AlternatingRowBackground="Gainsboro" Background="White" AutoGenerateColumns="False" 
               ItemContainerStyle="{StaticResource itemstyle}" CanUserAddRows="True" GridLinesVisibility="None" 
               Height="150" HorizontalAlignment="Left" HorizontalContentAlignment="Left"  IsEnabled="True" 
               IsReadOnly="True"   Margin="75,200,0,0" Name="dgMain" RowHeight="23" VerticalAlignment="Center" 
               VerticalContentAlignment="Center"  Width="380" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <i:InvokeCommandAction Command="{Binding EditData}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Name}" Header="Parameter" Width="140" />
            <DataGridTextColumn Binding="{Binding Path=Type}" Header="Type" Width="100" />
            <DataGridTextColumn Binding="{Binding Path=Value}" Header="Value" Width="120" />
        </DataGrid.Columns>

    </DataGrid>
    <Label Content="Name" Height="28" HorizontalAlignment="Left" Margin="75,186,0,0" Name="lblName" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Name, ElementName=dgMain}" HorizontalAlignment="Left" Margin="75,213,0,0" Name="txtName" VerticalAlignment="Top" Width="110" />
    <Label Content="Type" Height="28" HorizontalAlignment="Left" Margin="191,186,0,0" Name="lblType" VerticalAlignment="Top" />
    <ComboBox Height="23" Text="{Binding SelectedItem.Type, ElementName=dgMain}" HorizontalAlignment="Left" Margin="191,213,0,0" Name="cboType" VerticalAlignment="Top" Width="110" ItemsSource="{Binding}">
        <ComboBoxItem Content="integer" />
        <ComboBoxItem Content="double" />
        <ComboBoxItem Content="string" />
    </ComboBox>
    <Label Content="Value" Height="28" HorizontalAlignment="Left" Margin="307,186,0,0" Name="lblValue" VerticalAlignment="Top" />
    <TextBox Height="23" Text="{Binding SelectedItem.Value, ElementName=dgMain}"   HorizontalAlignment="Left" Margin="307,213,0,0" Name="textBox1" VerticalAlignment="Top" Width="110" />

    <TextBlock HorizontalAlignment="Left" Margin="428,15,0,0" Height="32">
            <ToggleButton  x:Name="Add" Focusable="False" Command ="{Binding AddNew}" Style="{StaticResource SMToggle}" >
                <Image Source="/Image/Add.png"  Width="16" Height="16" />
            </ToggleButton>
    </TextBlock>
</Grid>