9
votes

Silverlight Treeview. Ne peut pas lier la propriété "isexpanded"

J'ai TreeView contrôle et je veux lier les nœuds d'arborese ' iSexpanded "/ code> propriété de mon datasource éléments!

mais j'ai un Exception: xxx

exception interne: xxx

xaml: xxx < p> et les éléments de données: xxx


2 commentaires

Version de SDK et Toolkit? Qu'est-ce qui vous convaincre que cela a quelque chose à voir avec la propriété isexpanded ? Si vous supprimez le itemontainerStyle l'exception disparaît-elle?


"Si vous enlevez l'élémentContainerStyle, l'exception disparaît-elle?" Oui! Exception partez! Toolkit: Microsoft.com/silverlight


4 Réponses :


7
votes

Le moyen le plus rapide est de sous-classer à la fois le TreeView et le TreeViewItem , par exemple: xxx

malheureusement, vous perdrez le Thème par défaut du Treeview lorsque vous faites le sous-classement. C'est une faiblesse du concept de thème Silverlight. Ainsi, vous pouvez alternativement utiliser une propriété personnalisée propriété attachée ou un comportement qui traverse l'arborescence et définit les liaisons de l'extérieur. Parce que les nœuds d'arbre sont créés de manière paresseusement à la demande, vous devez écouter l'événement une fois pour chaque nœud qui n'a pas encore été rendu, puis définissez les liaisons dans ce gestionnaire d'événements pour chacun de ses enfants après avoir attendu le col de layouche.


2 commentaires

Setbinding ne prend pas 1 argument!


@Evgeny Ooops, ma mauvaise ... édité la réponse à ajouter les arguments manquants à la méthode. Setbinding (...).



4
votes

Je voulais juste souligner que cela est maintenant possible. J'utilise Silverlight 5, avec Silverlight Toolkit compilé contre SL5 et vous pouvez se lier à isexpandé. J'ai défini le style dans un endroit légèrement différent de toi. Voici mon XAML.

<controls:TreeView ItemsSource="{Binding Repository.MajorClasses}" ItemTemplate="{StaticResource TreeviewMajorClassTemplate}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
            <controls:TreeView.Resources>
                <Style TargetType="controls:TreeViewItem">
                    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
                </Style>
            </controls:TreeView.Resources>
        </controls:TreeView>


1 commentaires

Merci pour cette mise à jour, mais pour moi cela n'a pas fonctionné. Voir ma réponse ci-dessous.



1
votes

Suivi de Malcom, je l'ai eu pour fonctionner à l'aide de l'élémentContainerStyle à la place de SL5.

    <sdk:TreeView.ItemContainerStyle>
        <Style TargetType="sdk:TreeViewItem">
            <Setter Property="IsExpanded" Value="True"/>
            <Setter Property="Visibility" Value="{Binding IsVisible, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}" />
         </Style>
    </sdk:TreeView.ItemContainerStyle>


0 commentaires

1
votes

Si vous utilisez SL5, les SetTateurs XAML standard doivent fonctionner. Mais si vous utilisez SL4 ou ci-dessous, vous devrez utiliser settervaluebindinghelper code> de ici . Ensuite, votre XAML ressemblera à ce qui suit. Assurez-vous de copier soigneusement ce que j'ai ci-dessous.

<sdk:TreeView.ItemContainerStyle>
    <Style TargetType="sdk:TreeViewItem">
        <Setter Property="local:SetterValueBindingHelper.PropertyBinding">
            <Setter.Value>
                <local:SetterValueBindingHelper>
                    <local:SetterValueBindingHelper Property="IsSelected" Binding="{Binding Mode=TwoWay, Path=IsSelected}"/>
                    <local:SetterValueBindingHelper Property="IsExpanded" Binding="{Binding Mode=TwoWay, Path=IsExpanded}"/>
                </local:SetterValueBindingHelper>
            </Setter.Value>
        </Setter>
    </Style>
</sdk:TreeView.ItemContainerStyle>


0 commentaires