Laden...

Binding auf ViewModel in einem Style

Erstellt von sugar76 vor 5 Jahren Letzter Beitrag vor 5 Jahren 721 Views
S
sugar76 Themenstarter:in
69 Beiträge seit 2017
vor 5 Jahren
Binding auf ViewModel in einem Style

Hallo allerseits,

ich möchte den Hintergrund für alle DataGrids per Style setzen:


<Style TargetType="{x:Type DataGrid}">
    <Setter Property="Background">
        <Setter.Value>
            <VisualBrush Stretch="None">
                <VisualBrush.Visual>
                    <StackPanel>
                        <Label Content="Huhu"/>
                        <Label Content="{Binding Path=TestProperty}" />
                    </StackPanel>
                </VisualBrush.Visual>
            </VisualBrush>
        </Setter.Value>
    </Setter>
</Style>

Ein DataGrid wird dann wie folgt eingebunden (stark verkürzt):

<UserControl>
<!-- ... -->
<DataGrid
        ItemsSource="{Binding ItemListView}"
        SelectedItem="{Binding SelectedItem}">
    <DataGrid.Columns>
        <!-- ... -->
    </DataGrid.Columns>
</DataGrid>
</UserControl>

Das UserControl hat als DataContext ein ViewModel:

public class MyViewModel
{
        public ListCollectionView ItemListView { get; protected set; }

        public object SelectedItem { get; set; }

        public string TestProperty => "Blub";

        // ....
}

Problem: das Label mit dem Text "Huhu" wird angezeigt, das zweite Label bleibt leer. Es scheint, dass das Binding auf TestProperty nicht aufgelöst werden kann. Eine Fehlermeldung wird nicht ausgegeben.

Bindings, welche direkt im XAML des UserControls verwendet werden, funktionieren (ItemListView, SelectedItem).

Wie kann ich im Style dafür sorgen, dass der "richtige" DataContext verwendet wird?

Gruß

1.040 Beiträge seit 2007
vor 5 Jahren

Eine Fehlermeldung wird nicht ausgegeben.

Bei Binding-Problemen lohnt sich immer ein Blick in den Output, da findet man meistens Informationen.
Zum Problem: bin mir nicht 100%ig sicher, ob es überhaupt funktioniert, aber wenn dann am ehesten mit dem Schlagwort RelativeSource.