1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

ComboBox im UserControl ItemsSource zuweisen

Dieses Thema im Forum ".NET WPF & Silverlight" wurde erstellt von Lesterdor, 19. Juli 2014.

  1. Lesterdor

    Lesterdor Erfahrenes Mitglied

    Guten Tag liebe Community,

    ich habe mir ein eigenes "SuchPanel" gebaut, bei dem ich eine Textbox für das Suchwort, eine ComboBox, um ein Suchkriterium festzulegen und einen Button, um die Suche zu starten, verwende:

    ucSearchPanel XAML:
    Code (Text):
    1. <UserControl x:Class="TestProjekt.Views.UserControls.ucSearchPanel"
    2.              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3.              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4.              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    5.              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    6.              Width="auto" Height="auto">
    7.     <Grid>
    8.         <Grid.RowDefinitions>
    9.             <RowDefinition />
    10.             <RowDefinition />
    11.         </Grid.RowDefinitions>
    12.         <StackPanel Orientation="Horizontal" Grid.Row="0" >
    13.             <Label Name="lblSearch" Width="{Binding ElementName=tbSearch, Path=ActualWidth}" HorizontalContentAlignment="Center">Suche</Label>
    14.             <Label Name="lblSearchCriteria" Width="{Binding ElementName=cbSearchCriteria, Path=ActualWidth}" HorizontalContentAlignment="{Binding ElementName=lblSearch, Path=HorizontalContentAlignment}">Suchkriterium</Label>
    15.         </StackPanel>
    16.         <StackPanel Orientation="Horizontal" Grid.Row="1">
    17.             <TextBox Name="tbSearch" MinWidth="100"></TextBox>
    18.             <ComboBox Name="cbSearchCriteria" MinWidth="{Binding ElementName=tbSearch, Path=MinWidth}"  />
    19.             <Button Name="btnSearch">Suche</Button>
    20.         </StackPanel>
    21.     </Grid>
    22. </UserControl>

    Allerdings ändern sich die Suchkriterien von Anwendungsfall zu Anwendungsfall. Daher möchte ich mir das Property "ItemsSource" von der verwendeten ComboBox bei der Verwendung des ucSearchPanels zugänglich machen.

    Wenn ich dem ucSearchPanel über x:Name einen Bezeichner zuweise, kann ich via C#-Code Name des ucSearchPanels.NameComboBox. ItemsSource setzen, was auch funktioniert.

    Allerdings soll das auch in XAML selbst möglich sein. Daher habe ich mir ein Dependency-Property erstellt:

    Code (Text):
    1. using System.Collections;
    2. using System.Windows;
    3. using System.Windows.Controls;
    4.  
    5. namespace TestProjekt.Views.UserControls
    6. {
    7.     /// <summary>
    8.     /// Interaktionslogik für ucSearchRegion.xaml
    9.     /// </summary>
    10.     public partial class ucSearchPanel : UserControl
    11.     {
    12.         public static readonly DependencyProperty cbSearchCriteriaItemsSourceProperty;
    13.         public IEnumerable cbSearchCriteriaItemsSource
    14.         {
    15.             get { return (IEnumerable)GetValue(cbSearchCriteriaItemsSourceProperty); }
    16.             set { SetValue(cbSearchCriteriaItemsSourceProperty, value); cbSearchCriteria.ItemsSource = value; }
    17.  
    18.         }
    19.  
    20.         public string cbDisplayMemberPath
    21.         {
    22.             get
    23.             {
    24.                 return cbSearchCriteria.DisplayMemberPath;
    25.             }
    26.             set
    27.             {
    28.                 cbSearchCriteria.DisplayMemberPath = value;
    29.             }
    30.         }
    31.  
    32.         static ucSearchPanel()
    33.         {
    34.             cbSearchCriteriaItemsSourceProperty = DependencyProperty.Register("cbSearchCriteriaItemsSource",
    35.             typeof(IEnumerable), typeof(ucSearchPanel));
    36.         }
    37.  
    38.         public ucSearchPanel()
    39.         {
    40.             InitializeComponent();
    41.         }
    42.     }
    43. }

    Wie dem Quellcode zu entnehmen ist, setze ich aber nirgendwo, dass dieses Dependency-Property der internen ComboBox.ItemsSource zugewiesen werden soll. Daher werden in meiner ComboBox im ucSearchPanel auch keine Items angezeigt, sofern ich auf das Property eine ObservableCollection binde.

    Mir stellt sich nun die Frage, wie und wo ich im C#-Code angeben muss, dass sich das public static readonly DependencyProperty cbSearchCriteriaItemsSourceProperty auf cbSearchCriteria.ItemsSource bezieht.

    Ich möchte mich für eure Hilfe im Voraus bedanken und verbleibe

    mit freundlichen Grüßen

    Lester
     
  2. Lesterdor

    Lesterdor Erfahrenes Mitglied

    Guten Tag,

    kurze Rückmeldung:

    Ich habe das Problem behoben bekommen, indem ich einfach:

    Code (Text):
    1.      
    2. Binding binding = new Binding("cbSearchPlaceItemsSource");
    3.  binding.Source = this;
    4. cbSearchPlace.SetBinding(ComboBox.ItemsSourceProperty, binding);
    im Konstruktor geschrieben habe.
     
Die Seite wird geladen...