如何删除所有DataGrids的选择?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何删除所有DataGrids的选择?相关的知识,希望对你有一定的参考价值。

我有一个StackPanel,包含三个不同的DataGrid,这是结构:

<StackPanel orientation="Vertical" x:Name="DataGridContainer">
    <DataGrid />
    <DataGrid />
    <DataGrid />
</StackPanel>

每个DataGrid绑定不同的ItemSource,每个DataGrid绑定相同的SelectionChanged事件。

我需要做的是从所有DataGrid中删除Selection,除了点击的那个。

假设SelectionChanged事件是这样的:

private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    /*
       1. Get the DataGrid selected by the user
       2. Get all the DataGrids contained in DataGridContainer
       3. Iterate over all controls and remove the selection except for the DataGrid saved on the step1
    */
}

如何获取DataGridContainer的所有DataGrid并应用此逻辑?

UPDATE

我尝试了什么:

var datagrid = (DataGrid)sender;
var datagridList = DataGridContainer.Children.OfType<DataGrid>();

foreach(var dt in datagridList)
{
    if(dt != datagrid)
    {
         dt.UnselectAll();
    }
}

似乎没有工作,datagridList是空的

谢谢你的帮助。

答案

UnselectAll()触发了新的SelectionChanged事件。试试这个:

<StackPanel Orientation="Vertical" x:Name="DataGridContainer"
            DataGrid.SelectionChanged="DataGridContainer_SelectionChanged"
            xmlns:s="clr-namespace:System;assembly=mscorlib">
    <DataGrid>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding}" />
        </DataGrid.Columns>
        <s:String>A</s:String>
        <s:String>A</s:String>
        <s:String>A</s:String>
    </DataGrid>
    <DataGrid>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding}" />
        </DataGrid.Columns>
        <s:String>B</s:String>
        <s:String>B</s:String>
        <s:String>B</s:String>
    </DataGrid>
    <DataGrid>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding}" />
        </DataGrid.Columns>
        <s:String>C</s:String>
        <s:String>C</s:String>
        <s:String>C</s:String>
    </DataGrid>
</StackPanel>

private bool _handle = true;
private void DataGridContainer_SelectionChanged(object sender, RoutedEventArgs e)
{
    if (_handle)
    {
        var datagrid = e.OriginalSource as DataGrid;
        if (datagrid != null)
        {
            var datagridList = DataGridContainer.Children.OfType<DataGrid>();
            foreach (var dt in datagridList)
            {
                if (dt != datagrid)
                {
                    _handle = false;
                    dt.UnselectAll();
                    _handle = true;
                }
            }
        }
    }
}

以上是关于如何删除所有DataGrids的选择?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除使用片段管理器添加的所有片段?

如果在底部导航栏中选择了其他项目,如何删除 floatingActionButton 替换片段

如何从片段中调用 getSupportFragmentManager()?

如何在WPF Datagrids中修复“双向绑定需要路径或XPath”异常?

如何使用片段将联系人选择到edittext

如何修复 WPF Datagrids 中的“双向绑定需要路径或 XPath”异常?