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(); } } }
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>
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