【发布时间】:2015-07-09 11:19:56
【问题描述】:
我已经在不使用 MVVM 的情况下实现了这一点:
private void Del_btn_Click(object sender, RoutedEventArgs e)
{
try
{
List<string> cid = new List<string>();
foreach (DataRowView rw in Xgrid.SelectedItems)
{
cid.Add(rw[1].ToString());
MessageBox.Show("Deleting " + rw[1].ToString());
}
foreach (string cq in cid)
{
SqlConnection con = new SqlConnection(str);
con.Open();
SqlCommand cmd = new SqlCommand("delete_prc", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param1 = new SqlParameter();
param1.ParameterName = "@Cid";
param1.SqlDbType = SqlDbType.NVarChar;
param1.Value = cq;
cmd.Parameters.Add(param1);
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
现在我想用 MVVM 来做这件事。
我有customers.cs 模型类,其中包含所有字段。 现在我不知道如何绑定复选框,所以我可以做到这一点。
Xaml 代码:
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<Grid>
<CheckBox IsChecked="{Binding Path=ViewModelBase.CheckAll,
Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type DataGridRow}}}" Name="delete"/>
</Grid>
</DataTemplate>
</DataGrid.RowHeaderTemplate>
<DataGrid.Columns>
<DataGridTextColumn Header="rowNo." Width="60" Binding="{Binding RowNumber}" IsReadOnly="True">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="CustomerID" Width="80" Binding="{Binding CustomerID}" IsReadOnly="True"></DataGridTextColumn>
<DataGridTextColumn Header="CompanyName" Width="100" Binding="{Binding CompanyName}"></DataGridTextColumn>
<DataGridTextColumn Header="ContactName" Width="100" Binding="{Binding ContactName}"></DataGridTextColumn>
<DataGridTextColumn Header="ContactTitle" Width="100" Binding="{Binding ContactTitle}"></DataGridTextColumn>
<DataGridTextColumn Header="Address" Width="80" Binding="{Binding Address}"></DataGridTextColumn>
<DataGridTextColumn Header="City" Width="100" Binding="{Binding City}"></DataGridTextColumn>
<DataGridTextColumn Header="Region" Width="80" Binding="{Binding Region}"></DataGridTextColumn>
<DataGridTextColumn Header="PostalCode" Width="100" Binding="{Binding PostalCode}"></DataGridTextColumn>
<DataGridTextColumn Header="Country" Width="100" Binding="{Binding Country}"></DataGridTextColumn>
<DataGridTextColumn Header="Phone" Width="100" Binding="{Binding Phone}"></DataGridTextColumn>
<DataGridTextColumn Header="Fax" Width="100" Binding="{Binding Fax}"></DataGridTextColumn>
</DataGrid.Columns>
那么如何将它与 mvvm 集成。请帮我这样做。
我想知道要在我的视图模型类中定义什么以及执行此操作的绑定路径应该是什么。
【问题讨论】:
-
在 viewmodel 中定义什么是什么意思?
-
如果您询问如何在 viewmodel 中点击按钮,请使用“命令”来执行此操作。
-
我想将选定的项目传递给我的程序。我的程序只需要客户 ID。所以最初我通过 xgrid.selecteditems 循环选择的每一行的第一列。
-
您必须在视图模型中绑定网格的选定项属性,然后您可以在视图模型上循环遍历此属性的每个项以执行任何 sql 操作。