ComboBox im UserControl ItemsSource zuweisen

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:
<UserControl x:Class="TestProjekt.Views.UserControls.ucSearchPanel"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             Width="auto" Height="auto">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal" Grid.Row="0" >
            <Label Name="lblSearch" Width="{Binding ElementName=tbSearch, Path=ActualWidth}" HorizontalContentAlignment="Center">Suche</Label>
            <Label Name="lblSearchCriteria" Width="{Binding ElementName=cbSearchCriteria, Path=ActualWidth}" HorizontalContentAlignment="{Binding ElementName=lblSearch, Path=HorizontalContentAlignment}">Suchkriterium</Label>
        </StackPanel>
        <StackPanel Orientation="Horizontal" Grid.Row="1">
            <TextBox Name="tbSearch" MinWidth="100"></TextBox>
            <ComboBox Name="cbSearchCriteria" MinWidth="{Binding ElementName=tbSearch, Path=MinWidth}"  />
            <Button Name="btnSearch">Suche</Button>
        </StackPanel>
    </Grid>
</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:
using System.Collections;
using System.Windows;
using System.Windows.Controls;

namespace TestProjekt.Views.UserControls
{
    /// <summary>
    /// Interaktionslogik für ucSearchRegion.xaml
    /// </summary>
    public partial class ucSearchPanel : UserControl
    {
        public static readonly DependencyProperty cbSearchCriteriaItemsSourceProperty;
        public IEnumerable cbSearchCriteriaItemsSource
        {
            get { return (IEnumerable)GetValue(cbSearchCriteriaItemsSourceProperty); }
            set { SetValue(cbSearchCriteriaItemsSourceProperty, value); cbSearchCriteria.ItemsSource = value; }

        }

        public string cbDisplayMemberPath
        {
            get
            {
                return cbSearchCriteria.DisplayMemberPath;
            }
            set
            {
                cbSearchCriteria.DisplayMemberPath = value;
            }
        }

        static ucSearchPanel()
        {
            cbSearchCriteriaItemsSourceProperty = DependencyProperty.Register("cbSearchCriteriaItemsSource",
            typeof(IEnumerable), typeof(ucSearchPanel));
        }

        public ucSearchPanel()
        {
            InitializeComponent();
        }
    }
}

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
 
Guten Tag,

kurze Rückmeldung:

Ich habe das Problem behoben bekommen, indem ich einfach:

Code:
Binding binding = new Binding("cbSearchPlaceItemsSource");
 binding.Source = this;
cbSearchPlace.SetBinding(ComboBox.ItemsSourceProperty, binding);

im Konstruktor geschrieben habe.
 
Zurück