Pie*_*rre 3 c# wpf datagrid mvvm
我有一个 DataGrid,它的每一行都包含一个删除按钮,如下所示:
<Button Command="{Binding DeleteRowCriterionCommand}">Delete</Button>
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在不使用 DataGrid.Name 的情况下获取 currentItem 属性
<!-- 2ND : CRITERIA -->
<Grid>
<DataGrid ItemsSource="{Binding UserCriteria, Mode=TwoWay}" SelectedItem="{Binding SelectedItemDG, Mode=TwoWay}" AutoGenerateColumns="False">
<DataGrid.Columns>
<!--TEXTBOX FOR SQL VALUES-->
<DataGridTemplateColumn Header="SQLValue" Width="600">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!-- BUTTON FOR DELETING -->
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding DeleteRowCriterionCommand}">Delete</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
Run Code Online (Sandbox Code Playgroud)
我正在使用 MVVMLight,所以我知道如何将我的命令连接到我的 ViewModel,但唯一缺少的是获取我单击按钮所在行的索引。
这是使用 DataGrid.Name 的功能:
public void DeleteRowCriterion()
{
// I would like to replace the first line by not using DataGridName
// int currentRowIndex = DataGridName.Items.IndexOf(CriteriaDG.CurrentItem);
// UserCriteria.RemoveAt(currentRowIndex);
}
Run Code Online (Sandbox Code Playgroud)
如果有人知道怎么做,我会很感激的!
对于那些与我有同样问题的人,这是解决方案:
在您的 XAML 中,您必须将参数添加到您的按钮。它包含行的索引!(不要改变任何东西,它独立于 DataGrid 的名称工作)
CommandParameter="{Binding Path=SelectedIndex, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}">Delete</Button>
Run Code Online (Sandbox Code Playgroud)
然后,在您的 ViewModel 中,您必须创建您的 RelayCommand
public RelayCommand<Object> DeleteRowCriterionCommand { get; private set; }
Run Code Online (Sandbox Code Playgroud)
您必须添加<Object>如果你想利用你所添加的参数CommandParameter。然后,您在构造函数中实例化您的属性
DeleteRowCriterionCommand = new RelayCommand<Object>(param => DeleteRowCriterion(param), param => CanDeleteRowCriterion());
Run Code Online (Sandbox Code Playgroud)
现在,您可以在函数中使用参数:
private void DeleteRowCriterion(object parameter)
{
UserCriteria.RemoveAt(Convert.ToInt32(parameter));
}
Run Code Online (Sandbox Code Playgroud)
我希望它会希望你们中的一些人:)
| 归档时间: |
|
| 查看次数: |
699 次 |
| 最近记录: |