Laden...

DataGridTextColumn Header Binding an ViewModel

Erstellt von Console32 vor 10 Jahren Letzter Beitrag vor 10 Jahren 5.862 Views
C
Console32 Themenstarter:in
258 Beiträge seit 2011
vor 10 Jahren
DataGridTextColumn Header Binding an ViewModel

Hallo Community,

Ich versuche gerade die Spalten Titel eines DataGrids an das ViewModel zu binden.
Jedoch funktioniert das ganze nicht richtig.

Nachdem Google sofort einige lösungen ausgespuckt hat, habe ich es noch immer nicht zum laufen bekommen. Hier mal die Lösungen die ich versucht habe:

  <DataGrid ItemsSource="{Binding ErrorRecords}" Background="Transparent" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding ErrorNumber}" Header="{Binding Path=DataContext.Language[ErrorNumber], RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"/>
                <DataGridTextColumn Binding="{Binding LastOccurance}" Header="{Binding Path=Language[LastOccurence]}"/>
                <DataGridTextColumn Binding="{Binding ErrorCode}" Header="{Binding Path=DataContext.Language[ErrorCode],ElementName=LayoutRoot}"/>
                <DataGridTextColumn Binding="{Binding ErrorMessage}" Header="{Binding DataContext.Language[ErrorMessage], Source={StaticResource Proxy}}" />
            </DataGrid.Columns>
        </DataGrid>

Und die Binding Errors:> Fehlermeldung:

System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Language[LastOccurence]; DataItem=null; target element is 'DataGridTextColumn' (HashCode=44175353); target property is 'Header' (type 'Object')
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=DataContext.Language[ErrorCode]; DataItem=null; target element is 'DataGridTextColumn' (HashCode=36366333); target property is 'Header' (type 'Object')
System.Windows.Data Error: 3 : Cannot find element that provides DataContext. BindingExpression:(no path); DataItem=null; target element is 'FrameworkElement' (Name=''); target property is 'DataContext' (type 'Object')

Wie bekomme ich das Binding hin?

5.299 Beiträge seit 2008
vor 10 Jahren

kommt auf das Viewmodel an, woran du bindest

Der frühe Apfel fängt den Wurm.

C
Console32 Themenstarter:in
258 Beiträge seit 2011
vor 10 Jahren

An ein ObservableDictionary.

Habe bereits eine lösung gefunden.

<DataGrid ItemsSource="{Binding ErrorRecords}" Background="Transparent" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding ErrorNumber}" >
                    <DataGridTextColumn.HeaderTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding DataContext.Language[ErrorNumber], RelativeSource={RelativeSource AncestorType=UserControl}}"/>
                        </DataTemplate>
                    </DataGridTextColumn.HeaderTemplate>
                </DataGridTextColumn>

Warum die erste variante im OP nicht funktioniert hat weiß ich nicht.