मुझे समस्या हो रही है जो शायद संग्रहदृश्य से संबंधित है। समस्या यह प्रतीत होती है कि प्रत्येक समूह अपने स्वयं के चयनकर्ता का ट्रैक रखेगा, जो कि जब मैं पिछले समूह में पहले से चयनित आइटम का चयन करता हूं तो प्रोग्राम को एक नया चयन चेंजेड ईवेंट फायर करने से रोक देगा।

उदाहरण:
समूह 1:
पंक्ति1
पंक्ति2(चयनित)
समूह 2:
पंक्ति 1 (चयनित)

यदि मैं पहले समूह 1 खोलता हूं और पंक्ति 2 पर क्लिक करता हूं, तो समूह 2 में स्वैप करें और पहली पंक्ति का चयन करें। अगर मैं फिर से समूह 1 पर वापस जाता हूं और पंक्ति 2 पर क्लिक करता हूं तो कोई ट्रिगर घटना नहीं होगी और चयनित आइटम समूह 2 से वही रहेगा, जब तक कि मैं पंक्ति 1 पर क्लिक नहीं करता।
जो एक समस्या है क्योंकि ऐसे मामले हो सकते हैं जहां एक समूह में केवल 1 पंक्ति हो।

मेरा एक्सएएमएल इस तरह दिखता है (असंबंधित सामान हटा दिया गया)।

<DataGrid 
  Margin="0,10,0,0"
  SelectionMode="Single"
  IsReadOnly="True"
  Name="InvoiceGrid"
  SelectedItem="{Binding SelectedDiscrepancy, UpdateSourceTrigger=PropertyChanged}"
  RowDetailsVisibilityMode="{Binding RowDetailsVisible}"
  ItemsSource="{Binding InvoiceDiscrepancies}">
  <DataGrid.GroupStyle>
    <GroupStyle>
      <GroupStyle.ContainerStyle>
        <Style TargetType="{x:Type GroupItem}">
          <Setter Property="Margin" Value="0,0,0,5"/>
            <Setter Property="Template">
              <Setter.Value>
                <ControlTemplate TargetType="{x:Type GroupItem}">
                  <Expander IsExpanded="True" BorderBrush="#FF002255" >
                    <Expander.Header>
                      <StackPanel Orientation="Horizontal">
                        <Textblocks for design here.../>
                      </StackPanel>
                    </Expander.Header>
                    <Expander.Content>
                      <ItemsPresenter />
                    </Expander.Content>
                  </Expander>
                </ControlTemplate>
              </Setter.Value>
            </Setter>
          </Style>
        </GroupStyle.ContainerStyle>
      </GroupStyle>
    </DataGrid.GroupStyle>
    <DataGrid.Columns>
      <Columns here/>
    </DataGrid.Columns>
    <DataGrid.RowStyle>
      <style for animating the expanding/>
    </DataGrid.RowStyle>
    <DataGrid.RowDetailsTemplate>
      <DataTemplate>
        <Grid>
          <ListBox Name="listBox3" 
            SelectionMode="Single"
            HorizontalContentAlignment="Stretch"
            ItemTemplate="{StaticResource invoiceItemTemplate}"
            ItemsSource="{Binding Invoices, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
            SelectedItem="{Binding Path=DataContext.SelectedInvoice, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}">
            </ListBox>
        </Grid>
      </DataTemplate>
    </DataGrid.RowDetailsTemplate>
</DataGrid>

तो, किसी को पता है कि समाधान क्या हो सकता है? क्या समूहों के बीच एक चयनकर्ता होना संभव है, या जब मैं पैरेंट डेटाग्रिड में एक नई पंक्ति का चयन करता हूं तो क्या मुझे किसी तरह चयनकर्ता को साफ़ करना चाहिए?

संपादित करें: मुद्दे के उदाहरण के साथ जीथब रेपो https://github.com/Snuffsis/GroupingSelect

0
Snuffsis 5 नवम्बर 2020, 19:34

1 उत्तर

सबसे बढ़िया उत्तर

यदि आपको सभी चयनित सूची बॉक्स आइटम रखने की कोई आवश्यकता नहीं है, तो आप केवल चयन को साफ़ कर सकते हैं।

एक विकल्प के रूप में आप वर्तमान चयन को खाली करने के लिए संपत्ति परिवर्तन को शून्य मान के साथ बढ़ा सकते हैं।

public Invoice SelectedInvoice
{
    get => _selectedInvoice;
    set
    {
        if (_selectedInvoice != value)
        {
            if (_selectedInvoice != null) // <- add the 'if' block
            {
                _selectedInvoice = null;
                RaisePropertyChanged(() => SelectedInvoice);
            }
            _selectedInvoice = value;
            RaisePropertyChanged(() => SelectedInvoice);
        }
    }
}
0
ZanyBaka 6 नवम्बर 2020, 13:17