2016-05-16 8 views
0

Ich habe ein (soll) einfaches Projekt, wo ich eine Liste von drei Datenbanken erstellen muss, die die gleiche Struktur auf verschiedenen Servern gespeichert sind, stellt jede Datenbank ein anderes Geschäft Website innerhalb einer UnternehmensgruppeEine Combobox in wpf C# an eine Liste binden <t> nicht angezeigt

Ich baue eine Datenzugriffsebene, die zur Laufzeit vom Benutzer konfiguriert werden kann. Dies wird durch eine Liste von Objekten erreicht, die Datenbanken genannt werden, und der Benutzer, der den Firmennamen der Datenbank auswählt, die er aktualisieren möchte. Das erste Problem ist, dass ich eine Combobox an meine Liste von Datenbanken binden muss, die ich unten getan habe. Es gibt keinen Fehler beim Kompilieren, aber es wird auch nicht angezeigt.

ich etwas offensichtlich hier bitte

bin fehlt Vielen Dank

Die 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> 

Der Klassencode für Datenbank

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; 

    } 

} 

Und der Code für Fenster Last helfen

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

Antwort

2

Sie erstellen eine neue lokale FirmaViewSource, aber Sie sind wirklich nicht verbindlich. Ich denke, Sie sollten wie folgt ein ObjectDataProvider .Mit Code verwenden:

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> 

So können Sie Ihre Fenster laden-Code löschen. wie die ObjectDataProvider ist die eine GetFoundryDatabases aufrufen, wie Sie in MethodName

sehen können
+0

Danke, aber wenn ich tue bekomme ich den folgenden Fehler ** Geben Sie 'local: Databases' wurde nicht gefunden. bei MS.Internal.Platform.MemberDocumentValueSerializer'1.ConvertToDocumentValue (ITypeMetadata Typ, String-Wert, IServiceProvider Document) bei MS.Internal.Design.DocumentModel.DocumentTrees.Markup.XamlMarkupExtensionPropertyBase.get_Value() bei MS.Internal.Design. DocumentModel.DocumentTrees.DocumentPropertyWrapper.get_Value() ** –

+0

Sie müssen 'local' zu Ihrem Namespace definieren. In meinem Fall ist es' xmlns: local = "clr-namespace: WpfApplication2" ', in Ihrem ändern' WpfApplication2' zu Ihrem Namespace – Pikoh

+0

ich habe jetzt ‚xmlns: local = "clr-namespace: Rma_Administration_v2" Title = "Mainwindow" height = "350" width = "525" Loaded = "Window_Loaded"> 'Meine Methode ist jedoch ein Projekt, das im Aufruf SysproDAL –

Verwandte Themen