C# Wpf MVVM在DataGrid中选择/取消选择项
我正在处理一个MVVM项目,其中一个视图中包含以下代码:C# Wpf MVVM在DataGrid中选择/取消选择项,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在处理一个MVVM项目,其中一个视图中包含以下代码: <GroupBox Header="Defaut" BorderBrush="#FF4EA8DE" FontSize="16" Foreground="#FF436EFF" > <DataGrid Background="Transparent" FontSize="14" CanUserAddRows="False" CanUserDeleteRows="False" I
<GroupBox Header="Defaut" BorderBrush="#FF4EA8DE" FontSize="16" Foreground="#FF436EFF" >
<DataGrid Background="Transparent" FontSize="14" CanUserAddRows="False" CanUserDeleteRows="False" IsReadOnly="True" AutoGenerateColumns="False" Style="{x:Null}"
ItemsSource="{Binding ErrorList}">
<DataGrid.Columns>
<DataGridTextColumn Width="0.5*" Header="{DynamicResource Numéro Cordon}" Binding="{Binding BeadName}"></DataGridTextColumn>
<DataGridTextColumn Width="0.5*" Header="{DynamicResource Indice Image}" Binding="{Binding IndiceImage}"></DataGridTextColumn>
<DataGridTextColumn Width="0.5*" Header="{DynamicResource Défaut}" Binding="{Binding DispDefault}"></DataGridTextColumn>
<DataGridTemplateColumn Header="{DynamicResource Criticité}" Width="0.5*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding IsError, Converter={StaticResource IsErrorToCriticityLevel}, Mode=OneWay}"></Label>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="CmdB:CommandBehavior.Event" Value="MouseDown" />
<Setter Property="CmdB:CommandBehavior.Command" Value="{Binding DataContext.RobotErrorSelectionChangedCommand,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type controls:MetroWindow}}}"/>
<Setter Property="CmdB:CommandBehavior.CommandParameter" Value="{Binding Path=SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="BorderBrush" Value="#FF6593CF" />
<Setter Property="Background" Value="#FF6593CF" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding RobotErrorSelectionChangedCommand}" CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
</GroupBox>
我想做的是能够取消选择此列表中的选定项,但我找不到如何访问它
以下是ViewModel中与此列表相关的代码:
ObservableCollection<Erreur> _ErrorList;
public ObservableCollection<Erreur> ErrorList
{
get { return _ErrorList; }
set { _ErrorList = value; RaisePropertyChanged("ErrorList");}
}
private RelayCommand<Erreur> _RobotErrorSelectionChangedCommand;
public RelayCommand<Erreur> RobotErrorSelectionChangedCommand
{
get
{
return _RobotErrorSelectionChangedCommand
?? (_RobotErrorSelectionChangedCommand = new RelayCommand<Erreur>(
(Erreur err) =>
{
if (err != null)
{
viewservice.OpenDialog(new ErreurImageViewModel(err), ServiceLocator.Current.GetInstance<MainViewModel>());
}
}));
}
}
observedcollection\u错误列表;
公共可观察收集错误列表
{
获取{return\u ErrorList;}
设置{u ErrorList=value;RaisePropertyChanged(“ErrorList”);}
}
专用中继命令_机器人错误选择更改命令;
公共中继命令机器人错误选择更改命令
{
得到
{
返回_RobotErrorSelectionChangedCommand
(\u RobotErrorSelectionChangedCommand=新的中继命令(
(错误)=>
{
if(err!=null)
{
OpenDialog(新的ErreurImageViewModel(err),ServiceLocator.Current.GetInstance());
}
}));
}
}
谢谢你的帮助和建议 您可以将Datagrid中的
SelectedItem
属性绑定到VM中的属性,要清除当前选择,您只需将属性设置为:null
。这样,您可以随时通过代码取消选择SelectedItem
您可以将其绑定到视图中,如下所示:
<DataGrid ItemsSource="{Binding ErrorList}" SelectedItem="{Binding SelectedError}" ...>
无论何时,只要想清除所选内容,就可以执行以下操作:
SelectedError = null;
如果要从代码中选择特定实例,可以执行以下操作:
SelectedError = myInstanceOfError;
可以将Datagrid中的
SelectedItem
属性绑定到VM中的属性,要清除当前选择,只需将属性设置为:null
。这样,您可以随时通过代码取消选择SelectedItem
您可以将其绑定到视图中,如下所示:
<DataGrid ItemsSource="{Binding ErrorList}" SelectedItem="{Binding SelectedError}" ...>
无论何时,只要想清除所选内容,就可以执行以下操作:
SelectedError = null;
如果要从代码中选择特定实例,可以执行以下操作:
SelectedError = myInstanceOfError;
将
SelectedError
属性绑定到XAML中的SelectedItem
属性
XAML:
将
SelectedError
属性绑定到XAML中的SelectedItem
属性
XAML:
谢谢,两个答案都是正确的,只需稍加修改,我补充道:
SelectedItem="{Binding SelectedError}" in the XAML code.
我必须对这一部分进行注释,以禁用命令:
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding RobotErrorSelectionChangedCommand}" CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
现在SelectedError获得所选项目。Thanx谢谢,两个答案都是正确的,只需稍加修改,我添加了:
SelectedItem="{Binding SelectedError}" in the XAML code.
我必须对这一部分进行注释,以禁用命令:
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding RobotErrorSelectionChangedCommand}" CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
现在SelectedError获取所选项目。谢谢您的回答,问题是XAML代码配置为直接指向“RobotErrorSelectionChangedCommand”并获取selectedItem作为参数,因此当我添加“SelectedError”时属性我可以获取它,但上面提到的RelayCommand不起作用。感谢您的回答,问题是XAML代码配置为直接指向“RobotErrorSelectionChangedCommand”并获取selectedItem作为参数,因此当我添加“selectedError”时属性我可以获取它,但上面提到的RelayCommand不起作用。感谢您的回答,问题是XAML代码配置为直接指向“RobotErrorSelectionChangedCommand”并获取selectedItem作为参数,因此当我添加“selectedError”时我可以得到它,但是上面提到的继电器命令不起作用。你说的“不起作用”是什么意思?命令会被触发吗?您已经完成了吗?谢谢您的回答,问题是XAML代码被配置为直接指向“RobotErrorSelectionChangedCommand”并获取selectedItem作为参数,所以当我添加“selectedError”属性时,我可以得到它,但上面提到的RelayCommand不起作用。您所说的“不起作用”是什么意思?命令会被触发吗?你走过去了吗?