2017-11-08 2 views
1

Ich muss einen Standardwert hinzufügen "Select" in der Combobox.Ich kann diesen Wert der Datenbank hinzufügen.Dieser Speicherort Wert ist dynamisch.Erscheint basierend auf der UserRole. Ich habe versucht, verschiedene Möglichkeiten, nichts funktioniert. Bitte helfen.wpf combobox Standardwert zu textBlock

<ComboBox Width="140" ItemsSource="{Binding SecurityContexts, Mode=OneWay}" 
         SelectedItem="{Binding ActiveSecurityContext, Mode=TwoWay}" 
         ToolTip="Working Location"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Location}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Der Code ist hinter SecurityContexts = new ObservableCollection (_currentUser.ApplicationSecurityContexts);

public interface IApplicationSecurityContext 
{ 
    IRole Role { get; } 
    string Location { get; } 
    IEnumerable<string> Budgets { get; } 

} 

public IApplicationSecurityContext ActiveSecurityContext 
    { 
     get { return this._currentUser.ActiveSecurityContext; } 
     set 
     { 
      if (this._currentUser.ActiveSecurityContext != value) 
      { 
       this._currentUser.ChangeActiveSecurityContext(value); 

       RaisePropertyChanged("CurrentUser"); 

       LoadData(); 
      } 
     } 
    } 
+1

Was Sie gehen tatsächlich : eine Sammlung von SecurityContexts-Klassen haben, die eine "Location" -Eigenschaft verfügbar machen, die als Combobox-Element angezeigt werden soll. Sie müssen stattdessen nur ein Element hinzufügen? –

+0

Sorry für Tippfehler. Es ist "tun" statt "gehen" in meinem vorherigen Kommentar. Wenn Sie uns jedoch keine Klarstellungen geben, wird es schwierig sein, Ihnen eine Antwort zu geben. Vielleicht poste auch der Code, nicht nur die XAML, vor allem was "SecurityContexts" ist und woraus es besteht. –

+0

Vielen Dank, bitte überprüfen Sie den hinzugefügten Code .. Die Combobox zeigt location1, location5 usw. basierend auf der Rolle des Benutzers ... Ich muss nur einen Standardwert 'Select' in der Combobox hinzufügen – newbee

Antwort

0

Sie können Ihr Ziel mit CompositeCollection

erreichen Sie dies tun können. Definieren Ressource in Ihrem Netz/Usercontrol/Combobox:

<Grid.Resources> 
     <CollectionViewSource x:Key="cvs" Source="{Binding Binding SecurityContexts, Mode=OneWay}" /> 
     <DataTemplate DataType="{x:Type c:SecurityContexts}"> 
      <TextBlock Text="{Binding Location}"/> 
     </DataTemplate> 
    </Grid.Resources> 

dann Combobox ItemSource sein wird:

<ComboBox.ItemsSource> 
    <CompositeCollection> 
     <ComboBoxItem> 
     <TextBlock Text="select"/> 
     </ComboBoxItem> 
     <CollectionContainer Collection="{Binding Source= {StaticResource cvs}}"/> 
    </CompositeCollection> 
</ComboBox.ItemsSource> 

Es sollte funktionieren. Sie benötigen eine Datatemplate für Ihre Sammlung in der Ressource zu definieren, zu definieren, wie Ihr Artikel

Beachten Sie, dass c in c angezeigt: SecurityContexts der Pfad, in dem Sie Ihre benutzerdefinierten Objekt definiert

+0

Vielen Dank Daniele .. i versucht, die von Ihnen angegebene Lösung zu implementieren ... Ich habe ein Problem mit .... es sagt SecurityContexts ist nicht vorhanden ... ich bin neu bei wpf .. .i denke, ich mache etwas falsch .. – newbee

+0

Vielleicht war ich nicht genug klar. c: Stellen Sie den Pfad dar, in dem Ihre App SecurityContexts finden kann. Sie müssen also in Ihrem UserControl so etwas definieren: xmlns: c = "clr-namespace: yourProject.YourClass". –