9
votes

Changer la liste de reliure.itemsSource sur Button.click?

Question rapide ...

J'ai une liste code> avec son itemsSource code> propriété reliée à une propriété de collection dans une vue de vue comme suit: p>

<ListBox Name="CollectionsListBox">
    <ListBox.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=TimesheetsButton,Path=IsChecked}" Value="True">
                    <Setter Property="ListBox.ItemsSource" Value="{Binding Activity.Timesheets}" />
                    <Setter Property="ListBox.ItemContainerStyle" Value="{StaticResource TimesheetStyle}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=AttachmentsButton,Path=IsChecked}" Value="True">
                    <Setter Property="ListBox.ItemsSource" Value="{Binding Activity.Attachments}" />
                    <Setter Property="ListBox.ItemContainerStyle" Value="{StaticResource AttachmentStyle}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ListBox.Style>
</ListBox>


0 commentaires

3 Réponses :


8
votes

Je ne sais pas si le bouton peut faire cela. Mais Radiobutton peut vous satisfaire uniquement dans XAML.

Disons que nous avons deux Enum: p> xxx pré>

Je les ai définis comme ressource dans XAML: P>

<ListBox x:Name="List1">
    <ListBox.Style>
        <Style>
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding ElementName=Rdb1,Path=IsChecked}" Value="True"/>
                    </MultiDataTrigger.Conditions>
                    <Setter Property="ListBox.ItemsSource" Value="{Binding Source={StaticResource EProvider}}" />
                </MultiDataTrigger>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding ElementName=Rdb2,Path=IsChecked}" Value="True"/>
                    </MultiDataTrigger.Conditions>
                    <Setter Property="ListBox.ItemsSource" Value="{Binding Source={StaticResource FProvider}}" />
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
    </ListBox.Style>
</ListBox>
<RadioButton x:Name="Rdb1" GroupName="Group1" />
<RadioButton x:Name="Rdb2" GroupName="Group1" />


2 commentaires

Alors que je lie à un point de vue, j'ai pu faire une version simplifiée de votre exemple. Merci beaucoup.


Je vous en prie. Je pense juste qu'il y a tant de limites sur la gâchette. Peut-être que nous pouvons avoir une autre question en parlant de cela.



2
votes

à ma surprise Ce qui suit semble fonctionner: xxx

EDIT: Si cela fonctionne apparemment dépend de la nature de l'itemsSource. Les animations sont un peu désordonnées à cet égard. L'utilisation d'états constants est mieux par exemple. Comme suggéré avec Radiobuttons Depuis lors, des setters peuvent être utilisés.


1 commentaires

Merci. Je suis allé avec radiobutton s à la fin comme vous l'avez suggéré.



3
votes

Autant que je comprends, c'est ce dont vous avez besoin -
listbox avec itemSource dynamique

Voici comment j'ai fait
1) code derrière (avec deux énumjets) p> xxx pré>

xaml strong> p> xxx pré>

P>

    <ObjectDataProvider ObjectType="{x:Type sys:Enum}"
                        MethodName="GetValues"
                        x:Key="Enum2Provider">
        <ObjectDataProvider.MethodParameters>
            <x:TypeExtension Type="{x:Type local:Enum2}" />
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</Window.Resources>
<Grid>
    <!-- ListBox-->
    <ListBox x:Name="DynamicListBox"
             Padding="10" HorizontalAlignment="Left" Width="52" Margin="20,21,0,115">
        <ListBox.Style>
            <Style TargetType="{x:Type ListBox}">
                <Setter Property="ItemsSource"
                        Value="{Binding Source={StaticResource Enum1Provider}}"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=ToggleItemSource,
                                                   UpdateSourceTrigger=PropertyChanged
                                           }"
                                 Value="False">
                        <Setter Property="ItemsSource"
                                Value="{Binding Source={StaticResource Enum2Provider}}"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ListBox.Style>
    </ListBox>
    <!-- Toggle Button -->
    <Button Height="29"
            Margin="94,45.44,59,0" 
            Name="button1" 
            VerticalAlignment="Top" 
            Click="button1_Click"
            Content="ToggleItemSource" />
</Grid>


2 commentaires

Merci pour votre temps, mais j'ai trouvé une réponse plus simple.


J'ai senti le besoin de vous donner un uppote juste pour les efforts passés. Au moins cela m'a aidé.