2010-05-18 10 views
0

Je suis relativement nouveau à wpf et je ne comprends pas encore la liaison pour le moment.Problème avec la liaison de données statique dans wpf

Je veux avoir plusieurs combos dans mon application avec les mêmes éléments. La solution de base serait de copier la pâte, mais ce n'est pas une bonne pratique. J'ai donc pensé mettre une ressource statique avec le contenu que je voulais et lier toutes les listes déroulantes. Il compile et fonctionne bien mais la combo est vide.

Voici le code:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

<ItemsControl x:Key="Validations"> 
    <ItemsControl.Items> 
     <ComboBoxItem>String</ComboBoxItem> 
     <ComboBoxItem>Numeric</ComboBoxItem> 
    </ItemsControl.Items> 
</ItemsControl> 

et voici la liste déroulante:

<ComboBox ItemsSource="{Binding Source={StaticResource Validations}}"/> 

Je sais que la solution pour cela est probablement simple mais je n'ai pas encore compris . Je vais continuer d'essayer;)

Merci

Répondre

2

Faire la ressource une liste de chaînes, pas un élément visuel, puis utilisez l'extension StaticResource pour l'affecter à la propriété ItemsSource, comme ceci:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:sys="clr-namespace:System;assembly=mscorlib" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <x:ArrayExtension x:Key="Data" Type="{x:Type sys:String}"> 
      <sys:String>String1</sys:String> 
      <sys:String>String2</sys:String> 
      <sys:String>String3</sys:String> 
     </x:ArrayExtension> 
    </Window.Resources> 
    <Grid> 
     <StackPanel> 
      <ComboBox ItemsSource="{StaticResource Data}"/> 
      <ComboBox ItemsSource="{StaticResource Data}"/> 
      <ComboBox ItemsSource="{StaticResource Data}"/> 
     </StackPanel> 
    </Grid> 
</Window> 

Notez la définition de l'espace de noms xmlns:sys (mappe à l'espace de noms System dans l'assembly mscorlib) et l'utilisation de l'élément x:ArrayExtension pour déclarer un tableau simplement en XAML.

+0

Merci pour l'aide, mais cela n'a pas fonctionné .. Il lève une exception: Impossible de convertir la valeur de l'attribut 'ItemsSource' en objet de type 'System.Collections.IEnumerable'. 'System.Windows.Markup.ArrayExtension' n'est pas une valeur valide pour la propriété 'ItemsSource'. – zync

+0

Cela a été essayé et testé sur VS2010 avec .NET 4. - Utilisez-vous le même? –