datagrid 右键取得单数据 wpf mvvm
时间: 2023-06-27 18:01:48 浏览: 225
WPF中DataGrid得到其中一行的值
4星 · 用户满意度95%
### 回答1:
使用WPF MVVM模式,我们可以通过以下步骤对DataGrid进行右键单个数据提取:
1. 在ViewModel中定义一个SelectedData属性,用于保存所选数据的引用。
2. 在DataGrid中添加一个命令,该命令在右键单击时被触发。此命令应该使用鼠标事件参数获取所选行的数据,并将其分配给SelectedData属性。
3. 在DataGrid中设置RowStyle,该样式使用上一步中分配的SelectedData属性来确定是否为所选行,从而高亮显示。
以下是一个简单的示例:
在ViewModel类中添加以下代码:
```csharp
private object _selectedData;
public object SelectedData
{
get { return _selectedData; }
set
{
_selectedData = value;
OnPropertyChanged("SelectedData");
}
}
public ICommand GetDataCommand { get; set; }
public ViewModel()
{
GetDataCommand = new RelayCommand<object>(GetData);
}
private void GetData(object parameter)
{
SelectedData = parameter;
}
```
在XAML中使用以下代码为DataGrid添加右键菜单和行选中样式:
```xaml
<DataGrid x:Name="MyDataGrid" ItemsSource="{Binding Data}" AutoGenerateColumns="True">
<DataGrid.Resources>
<ContextMenu x:Key="DataGridContextMenu">
<MenuItem Header="Get Data" Command="{Binding Path=GetDataCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=DataContext}"/>
</ContextMenu>
</DataGrid.Resources>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Foreground" Value="Black"/>
<Setter Property="Background" Value="Transparent"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=DataContext.SelectedData, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Value="{Binding}">
<Setter Property="Foreground" Value="White"/>
<Setter Property="Background" Value="Blue"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.ContextMenu>
<StaticResource ResourceKey="DataGridContextMenu"/>
</DataGrid.ContextMenu>
</DataGrid>
```
在此示例中,我们使用了一个RelayCommand类来实现命令,它是一个常见的MVVM助手类,可用于在ViewModel中定义ICommand属性并将其分配给XAML中的控件。我们还使用了一个DataContext.SelectedData属性,并在行样式的DataTrigger中使用它来高亮显示所选行。最后,在ContextMenu中定义了一个MenuItem,该MenuItem使用GetDataCommand命令并使用FindAncestor引用DataGridRow来获取所选数据并将其传递给ViewModel中的GetData方法。
以上就是datagrid 右键取得单数据 wpf mvvm的回答。
### 回答2:
在 WPF MVVM 中,可以通过对 DataGrid 控件进行右键点击来获取选中的单个数据。首先,在视图层中,需要将 DataGrid 控件绑定到 ViewModel 中的一个集合属性,例如:
```
<DataGrid ItemsSource="{Binding DataList}" SelectedItem="{Binding SelectedData}" />
```
其中,DataList 是 ViewModel 中的一个 ObservableCollection<T> 类型的属性,用于存储需要在 DataGrid 中显示的数据。SelectedData 则是 ViewModel 中的一个 T 类型的属性,用于存储用户选中的单个数据。
在 ViewModel 层中,需要定义 SelectedData 属性的 get 和 set 方法,并在 set 方法中触发 PropertyChanged 事件,以便在视图层中更新右键菜单或其他相关控件的状态。
然后,在 DataGrid 控件的右键菜单中,可以使用 Command 控件绑定到 ViewModel 中的一个 ICommand 类型的属性或方法。在这个 ICommand 中,可以通过 SelectedData 属性获取当前选中的单个数据,并对其进行相应的操作,例如删除、编辑等。
总之,在 WPF MVVM 中,可以通过在视图层中绑定 DataGrid 控件到 ViewModel 中的集合属性,然后通过选中单个数据来触发 SelectedData 属性的 set 方法,并利用 ICommand 控件来进行相应的操作,从而实现在 DataGrid 中获取单个数据的功能。
阅读全文