WPF C# datagrid 单击选中再单击取消选中
第一次发,发个挺有意思的东西。
之前在网上搜索,点击WPF中Datagrid再点击取消选择的,几乎没有。于是就自己想了一个方法,算是解决了吧。直接上图,
啥都没点之前,
第一次点击,展开datarow
再点击一次,收回(算是收回吧)
思路,
实际上实现的是,两个event,一个mousedown,一个selectionchanged。在触发selectionchanged的时候,把要展开的内容设置成visible,在触发Mousedown的时候,把selecteditem设置成null,在把要展开的内容设置成collapsed。 然后就成了。点击一次选中,再点击空白处或者已选择的行,取消选中,不再显示datarow details。
核心的代码,
mvvm模式下只能这么写,这样处理触发事件
public class MyeventCommand : TriggerAction<DependencyObject>
{
public ICommand Command
{
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value);}
}
public static readonly DependencyProperty CommandProperty =
DependencyProperty.Register("Command",typeof(ICommand),typeof(MyeventCommand),new PropertyMetadata(null));
public object CommandParateter
{
get { return (object)GetValue(CommandParateterProperty); }
set { SetValue(CommandParateterProperty,value); }
}
public static readonly DependencyProperty CommandParateterProperty =
DependencyProperty.Register("CommandParateter", typeof(object), typeof(MyeventCommand), new PropertyMetadata(null));
protected override void Invoke(object parameter)
{
if (CommandParateter != null)
parameter = CommandParateter;
var cmd = Command;
if (cmd != null)
cmd.Execute(parameter);
}
}
XAML.cs 里面using xxx.MyeventCommand;
XAML
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDown">
<i:InvokeCommandAction Command="{Binding Datagrid_trick}"></i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
VM,
[Command()]
public void Datagrid_trick()
{
Access_view_2 access_View_2 = (Access_view_2)Access_screens[1];
access_View_2.Datagrid_update.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.Collapsed;
Index_trick = null;
}
[DependsUpon("Index_trick")]
public void Datagrid_rick2()
{
Access_view_2 access_View_2 = (Access_view_2)Access_screens[1];
access_View_2.Datagrid_update.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.VisibleWhenSelected;
}
这里的这个DependsUpon,继承自Attribute, 主要是在关联的属性的propertychanged的时候响应。用别的方法应该也可以。
主要分享个思路。第一次发帖多多包涵!