2010-03-10 6 views
0

Quel est le problème avec ce code? Il jette l'exception: « View ne peut pas être partagée par plus d'un ListView »'La vue ne peut pas être partagée par plus d'une erreur Wpf ListView'

<ListView 
    ItemsSource="{Binding}" 
    SelectionMode="Extended"> 
<ListView.Style> 

    <Style TargetType="ListView"> 
    <Style.Triggers> 
    <DataTrigger Binding="{Binding ElementName=MyControl, Path=IsCompany}" Value="True"> 
    <Setter Property="View" Value="{StaticResource GridViewCompanies}" /> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding ElementName=MyControl, Path=IsCompany}" Value="False"> 
    <Setter Property="View" Value="{StaticResource GridViewPeople}" /> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding ElementName=MyControl, Path=IsCompany}" Value="{x:Null}"> 
    <Setter Property="View" Value="{StaticResource GridViewBoth}" /> 
    </DataTrigger> 
    </Style.Triggers> 
    </Style> 

</ListView.Style>   
</ListView> 

public bool? IsCompany 
{ 
get { return (bool?)GetValue(IsCompanyProperty); } 
set { SetValue(IsCompanyProperty, value); } 
}   
public static readonly DependencyProperty IsCompanyProperty = 
DependencyProperty.Register("IsCompany", typeof(bool?), typeof(MyControl), new UIPropertyMetadata(null)); 

ÉDITÉ:

J'ai essayé de définir la vue dans le code derrière et il fonctionne. Quel est le problème avec XAML alors?

if() .. 
MyListView.View = Resources["GridViewCompanies"] as GridView; 

Répondre

0

L'erreur est due au fait que GridView est appliqué à plusieurs ListView. Votre style ListView est-il appliqué à plusieurs contrôles? J'ai jeté un oeil dans Reflector, et il semble que ce scénario devrait fonctionner pour un seul contrôle.

Qu'essayez-vous exactement d'accomplir? J'imagine que vous voulez juste montrer différentes colonnes. Vous pouvez peut-être créer un comportement joint pour générer des colonnes pour GridView en fonction de la valeur de la propriété à laquelle vous liez.

+0

Non, j'ai seulement 1 ListView dans lequel j'ai directement défini le style. Toutes les ressources statiques (GridViewBoth, ...) sont définies dans les ressources de UserControl. Oui, vous avez raison, c'est exactement ce que je veux faire - montrer différentes colonnes en fonction de la propriété. –

Questions connexes