簡體   English   中英

如何刪除對所有DataGrid的選擇?

[英]How to remove selection to all 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的DataGridContainer並應用此邏輯?

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;
                }
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM