Привязка какого-либо флажка в выпадающий список к списку - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть коллекция заведения, которую я показываю в выпадающем списке. Одним из свойств является «IsSelected», которое позволяет мне выбирать несколько элементов в комбинированном списке.

        <ComboBox Name="CmbEtabTout" 
              ItemsSource="{Binding EtablissementsUtilisateur}"
              Grid.IsSharedSizeScope="True"
              Grid.Column="2" 
              Grid.ColumnSpan="3" 
              Grid.Row="2" 
              Height="25" 
              Width="250">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="30" />
                        <ColumnDefinition SharedSizeGroup="AgentA" Width="auto" />
                        <ColumnDefinition Width="5" />
                        <ColumnDefinition SharedSizeGroup="AgentB" Width="auto" />
                    </Grid.ColumnDefinitions>
                    <CheckBox IsChecked="{Binding IsSelected}" Grid.Column="0"/>
                    <TextBlock Text="{Binding IdEtablissement}" Grid.Column="1"/>
                    <TextBlock Text="{Binding Nom}" Grid.Column="3"/>
                </Grid>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

    <ListView x:Name="LVAgent"
    ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
    ItemsSource="{Binding Agents}" Grid.ColumnSpan="2" Margin="150,0,42,0" Grid.Column="2" Grid.Row="4" Grid.RowSpan="5" >
        <ListView.View>
            <GridView>
                <GridViewColumn>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox IsChecked="{Binding IsSelected}" 
                                              Command="{Binding DataContext.SelectAgentCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"
                                              CommandParameter="{Binding}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                    <CheckBox IsChecked="{Binding SelectAllAgents}"
                        IsEnabled="True"/>
                </GridViewColumn>
                <GridViewColumn Header="Matricule"
                    Width="110" 
                    DisplayMemberBinding="{Binding Matricule}"/>
                <GridViewColumn Header="Nom" 
                    Width="120"
                    DisplayMemberBinding="{Binding Nom}"/>
                <GridViewColumn Header="Prénom" 
                    Width="120" 
                    DisplayMemberBinding="{Binding Prenom}"/>

            </GridView>
        </ListView.View>
    </ListView>

Моя коллекция комбинированного списка:

        private ObservableCollection<Etablissement> _EtablissementsUtilisateur;
    public ObservableCollection<Etablissement> EtablissementsUtilisateur
    {
        get
        {
            return _EtablissementsUtilisateur;
        }
        set
        {
            if (value != _EtablissementsUtilisateur)
            {
                _EtablissementsUtilisateur = value;
                RaisePropertyChanged(nameof(EtablissementsUtilisateur));
            }
        }
    }

Я пытаюсь выяснить, как чтобы связать эти списки, чтобы обновить список sh: если я выберу три заведения, в списке отобразятся агенты этих трех заведений. С командой может быть?

     <CheckBox IsChecked="{Binding IsSelected}" Grid.Column="0"/>

Выглядит так:

enter image description here

Поскольку я уже связал свой флажок с «IsSelected» (используется для SelectAll), Я не знаю, как выполнить привязку, чтобы обновить sh список агентов позади, когда я проверяю, без необходимости нажимать кнопку типа «подтвердить».

Редактировать: Моя проблема сейчас, если я хочу сделайте что-то вроде этого, например:

       <CheckBox IsChecked="{Binding IsSelected}" Command="{Binding }" Grid.Column="0" />

Я могу привязываться только к классу Etablissement, а не к ViewModel. (из-за itemSource ComboBox я думаю)

1 Ответ

1 голос
/ 04 февраля 2020

цель состоит в том, чтобы "когда какой-либо флажок был отмечен или снят, если я выбрал три заведения, в списке отображаются агенты этих трех заведений".

"когда какой-либо флажок отмечен или не установлен" => свойство изменило обработчик события

"если я выберу три заведения" => если оператор

"в списке отображаются агенты этих трех заведений" => вызов метода

в предположении Etablissement : INotifyPropertyChanged, мы могли бы добавить обработчик событий для каждого Etablissement.PropertyChanged. Другой вариант - добавить обработчик в CheckBox.Checked и CheckBox.Unchecked.

bonus: обработчики событий могут быть асинхронными c, поэтому, если "вызов метода" асинхронный c, вы правы дома, чтобы ждать его, что означает, что ваш пользовательский интерфейс остается отзывчивым и не блокируется.

я бы добавил обработчики внутри события Loaded для вашего UserControl или, возможно, ComboBox

Loaded += delegate
{
    PropertyChangedEventHandler propertyChanged = delegate
    {
        //if number of checked items != 3
            //return;
        //update agents
    };
    foreach (var etablissement in EtablissementsUtilisateur)
        etablissement.PropertyChanged += propertyChanged;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...