0

我正在使用 MVVM 模式开发 WPF 应用程序。

我正在将数据填充到 gridview 并在选择时填充到文本框、组合框以编辑内容。然后保存数据。

现在我想将新数据添加到网格视图中。用户对文本框的输入,组合框应添加到网格视图中,我需要将其保存到数据库中。

我的 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>

请帮我。序列号

4

2 回答 2

0

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

Param.Add(SelectedItem);
于 2013-10-25T11:19:52.010 回答
0

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

在添加模式下,只需将 DisplayedParameter 设置为 Parameter 的新实例。单击“保存”按钮,将参数保存到后端并刷新 Param 属性的值(我假设它是参数的 List/ObservableCollection)。或者,将参数添加到 Param 列表中,然后将参数保存到后端。

在编辑模式下,只需将 DisplayedParameter 设置为 SelectedItem 的值(您还需要 SelectedItem 的 viewmodel 属性)。点击保存后,可以将修改后的参数保存到后台并刷新参数。

请注意,默认情况下,您仍处于添加模式;并且仅在用户请求时才切换到编辑模式(例如,在数据网格中选择一个项目,或者可能单击数据网格行中的编辑按钮)。完成编辑(例如用户保存或取消)后,您将返回默认模式。

于 2013-10-25T11:26:38.320 回答