Announcement

Collapse
No announcement yet.

[WPF] Vom UserControl Zugriff auf MainWindow

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • [WPF] Vom UserControl Zugriff auf MainWindow

    Moin,

    Ich habe eine Anwendung mit einer etwas größeren DataGrid im MainWindow.
    Für diese DataGrid gibt es Spaltenfilter und um das XAML nicht zu sehr aufzublähen, habe ich einen UserControl für die Column-Header erstellt, die sich auch super einbinden lassen.

    Das UserControl sieht so aus:
    HTML Code:
    <UserControl x:Class="AuftragsuebersichtUI.UserControls.DataGridColumnHeader"
                 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" 
                 xmlns:local="clr-namespace:AuftragsuebersichtUI.UserControls"
                 mc:Ignorable="d" 
                 d:DesignHeight="450" d:DesignWidth="800">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid Grid.Row="0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="{Binding Title}" Style="{StaticResource DataGridColumnHeader_TextBlock}"/>
                <Button Grid.Column="1" Style="{StaticResource DataGridColumnHeader_SortButton}"/>
            </Grid>
            <TextBox Grid.Row="1" Style="{StaticResource DataGridColumnHeader_TextBoxFilter}"/>
        </Grid>
    </UserControl>
    Code:
    namespace AuftragsuebersichtUI.UserControls
    {
        /// <summary>
        /// Interaktionslogik für DataGridColumnHeader.xaml
        /// </summary>
        public partial class DataGridColumnHeader : UserControl
        {
            public string Title { get; set; }
            public string Id { get; set; }
    
    
            public DataGridColumnHeader()
            {
                InitializeComponent();
            }
        }
    }
    Im MainWindow nutze ich das auf folgende Weise:
    HTML Code:
                    xmlns:myuc="clr-namespace:AuftragsuebersichtUI.UserControls"
    
                    ...
    
                    <DataGridTemplateColumn Width="Auto">
                        <DataGridTemplateColumn.Header>
                            <myuc:DataGridColumnHeaderDate Title="Datum" Id="Auftragsdatum"/>
                        </DataGridTemplateColumn.Header>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Margin="5 2" Orientation="Horizontal">
                                    <TextBlock Margin="0 0 5 0" Text="{Binding Path=Auftragsdatum, StringFormat=dd.MM.yyyy}"/>
                                    <TextBlock Text="{Binding Path=Auftragsdatum, StringFormat=HH:mm:ss}" Foreground="#999"/>
                                </StackPanel>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
    Wenn ich nun aber auf die TextBox einen EventHandler setzen möchte, wird dieser im Namespace AuftragsuebersichtUI.UserControls angelegt, klar.
    Aber ich möchte zwecks Filterung auf die DataGrid aus dem übergeordneten Namespace AuftragsuebersichtUI zugreifen und finde grad den Weg dahin nicht.

    Ich habe mir ein DataContextModel angelegt, in dem alle relevanten Daten gesammelt sind und die UI per INotfiyPropertyChanged Interface aktualisiert wird.
    Aber selbst wenn ich das public setze, kann ich mir das in den Namespace AuftragsuebersichtUI.UserControls nicht reinziehen.

    Welche Lösungen gäbe es und welche wäre zu priorisieren?

    Danke für Infos
    Gruß Arne
    PHP rocks!
    Eine Initiative der PHP Community
Working...
X