我正在使用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>
请帮帮我。 SN
答案 0 :(得分:0)
假设您正确使用MVVM,您的Param
属性是一个集合,并且您的SelectedItem
属性与集合中的项目类型相同,那么您应该能够做到这在视图模型的SaveData
命令中:
Param.Add(SelectedItem);
答案 1 :(得分:0)
如果您正在使用MVVM,那么不要将TextBox / ComboBox直接绑定到datagrid,而是将它们绑定到ViewModel中的Parameter类型的属性(例如public Parameter DisplayedParameter {get; set; }
)。然后支持TextBox / ComboBox的两种模式 - 添加和编辑。
在“添加模式”下,只需将DisplayedParameter设置为参数的新实例。单击Save按钮,将参数保存到后端并刷新Param Property的值(我假设是参数的List / ObservableCollection)。或者,将参数添加到Param列表,然后将参数保存到后端。
在编辑模式下,只需将DisplayedParameter设置为SelectedItem的值(您还需要SelectedItem的viewmodel属性)。单击“保存”,可以将编辑后的参数保存在后端并刷新参数。
请注意,默认情况下,您仍处于添加模式;并且只有在用户请求时才切换到编辑模式(例如,选择datagrid中的项目,或者单击datagrid行中的编辑按钮)。完成编辑后(例如,用户保存或取消),您将返回默认模式。