2016-05-16 2 views
0

J'ai un (devrait être) un projet simple où j'ai besoin de créer une liste de trois bases de données qui sont la même structure stockée sur différents serveurs, chaque base de données représente une entreprise différente site au sein d'un groupe de sociétésLiaison d'une liste déroulante dans wpf C# à une liste <t> ne pas afficher

Je construis une couche d'accès aux données qui peut être configurée à l'exécution par l'utilisateur. Cela sera réalisé par une liste d'objets appelés bases de données et l'utilisateur sélectionnant le nom de l'entreprise de la base de données qu'ils souhaitent mettre à jour. Le premier problème est que je dois lier un combobox à ma liste de bases de données, ce que j'ai fait ci-dessous. Il ne se trompe pas quand je compile mais il ne l'affiche pas non plus.

Il me manque quelque chose d'évident ici s'il vous plaît aider

Un grand merci

Le Xmal

<Window.Resources> 
    <CollectionViewSource x:Key="companyViewSource"/> 

</Window.Resources> 
<Grid> 

    <Grid Height="38" HorizontalAlignment="Left" Margin="11,79,0,0" Name="grid2" VerticalAlignment="Top" Width="262"> 
     <ComboBox Height="23" HorizontalAlignment="Left" Margin="136,9,0,0" Name="cBComapny" VerticalAlignment="Top" Width="120" 
        ItemsSource="{Binding Source={StaticResource companyViewSource}}" 
        DisplayMemberPath="CompanyName" 
        SelectedValuePath="CompanyName" 
        SelectedValue="{Binding CompanyLetter}" /> 
    </Grid> 
</Grid> 

Le code de classe pour la base de données

public class Databases 
{ 
    public string Database { get; set; } 
    public string CompanyName { get; set; } 
    public string ServerName { get; set; } 
    public string CompanyLetter { get; set; } 

    public Databases() 
    { 

    } 

    public static List<Databases> GetFoundryDatabases() 
    { 
     List<Databases> Foundries = new List<Databases>(); 

     Foundries.Add (new Databases(){Database="CompanyA", CompanyName="Company1", ServerName="Server1", CompanyLetter="A"}); 
     Foundries.Add(new Databases() { Database = "CompanyL", CompanyName = "Company2", ServerName = "Server1", CompanyLetter = "L" }); 
     Foundries.Add(new Databases() { Database = "CompanyR", CompanyName = "Company3", ServerName = "Server2", CompanyLetter = "R"}); 

     return Foundries; 

    } 

} 

Et le code pour le chargement de la fenêtre

System.Windows.Data.CollectionViewSource companyViewSource = new CollectionViewSource(); 
      companyViewSource.Source=SysproDAL.Databases.GetFoundryDatabases(); 
      companyViewSource.View.MoveCurrentToFirst(); 

Répondre

2

Vous créez une nouvelle société locale, ViewViewSource, mais vous ne la liez pas vraiment. Je pense que vous devriez utiliser un ObjectDataProvider .Modification votre code comme suit:

XAML

xmlns:dal="clr-namespace:SysproDAL;assembly:SysproDAL" 

    <Window.Resources> 
     <ObjectDataProvider x:Key="DataBasesDataProvider" 
      ObjectType="{x:Type dal:Databases}" MethodName="GetFoundryDatabases"/> 
    </Window.Resources> 
    <Grid> 

     <Grid Height="38" HorizontalAlignment="Left" Margin="11,79,0,0" Name="grid2" VerticalAlignment="Top" Width="262"> 
      <ComboBox Height="23" HorizontalAlignment="Left" Margin="136,9,0,0" Name="cBComapny" VerticalAlignment="Top" Width="120" 
       ItemsSource="{Binding Source={StaticResource DataBasesDataProvider}}" 
       DisplayMemberPath="CompanyName" 
       SelectedValuePath="CompanyName" 
       SelectedValue="{Binding CompanyLetter}" /> 
     </Grid> 
    </Grid> 

De cette façon, vous pouvez supprimer votre code de chargement de la fenêtre. comme le ObjectDataProvider est l'appelant GetFoundryDatabases comme vous pouvez le voir dans MethodName

+0

Merci, mais quand je le fais j'obtiens l'erreur suivante ** Type 'local: Bases de données' n'a pas été trouvé. à MS.Internal.Platform.MemberDocumentValueSerializer'1.ConvertToDocumentValue (type ITypeMetadata, valeur String, IServiceProvider DocumentServices) à MS.Internal.Design.DocumentModel.DocumentTrees.Markup.XamlMarkupExtensionPropertyBase.get_Value() à MS.Internal.Design. DocumentModel.DocumentTrees.DocumentPropertyWrapper.get_Value() ** –

+0

Vous devez définir 'local' dans votre espace de noms. Dans mon cas, il s'agit de' xmlns: local = "clr-namespace: WpfApplication2" ', dans le vôtre, remplacez' WpfApplication2' par votre namespace – Pikoh

+0

J'ai maintenant 'xmlns: local = "espace de noms clr: Rma_Administration_v2" Titre = "MainWindow" Hauteur = "350" Largeur = "525" Loaded = "Window_Loaded"> 'Cependant, ma méthode est un projet qui a été ajouté dans l'appel SysproDAL