WPF Datagrid [System.Windows.Datenfehler: 4]
Ich habe eine WPF Anwendung mit einem DataGrid
wie unten gezeigt:
Datagrid (vereinfachte):
<DataGrid x:Name="CoreServiceLogDataGrid"
Grid.Row="0"
Height="auto"
ItemsSource="{Binding Source={StaticResource CoreServiceCollection}}"
AutoGenerateColumns="False"
CanUserReorderColumns="True"
CanUserSortColumns="True"
IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn x:Name="ID"
Header="ID"
Binding="{Binding ID}" />
<DataGridTextColumn Binding="{Binding Timestamp}"
Header="Timestamp" />
</DataGrid.Columns>
</DataGrid>
wenn die Daten geladen, bekomme ich die folgende Fehlermeldung (mehrfach):
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid', AncestorLevel='1''. BindingExpression:Path=AreRowDetailsFrozen; DataItem=null; target element is 'DataGridDetailsPresenter' (Name=''); target property is 'SelectiveScrollingOrientation' (type 'SelectiveScrollingOrientation')
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid', AncestorLevel='1''. BindingExpression:Path=HeadersVisibility; DataItem=null; target element is 'DataGridRowHeader' (Name=''); target property is 'Visibility' (type 'Visibility')
Ich habe Keine Ahnung, warum dies geschieht und wie dies zu BEHEBEN.
EDIT: (Info über CoreServiceLogViewCollection)
CoreServiceCollection ist nur eine ListCollectionView.
public static ListCollectionView CoreServiceLogViewCollection {
get {
if (_coreServiceCollection == null) {
_coreServiceCollection =
new ListCollectionView(LogSession.CoreServiceLogCollection);
}
return _coreServiceCollection;
}
}
der parameter ist nur ein ObservableCollection
mit ID
,Timestamp
und andere Eigenschaften
EDIt2:
Die Instanziierung erfolgt in der App.xaml:
<ResourceDictionary>
<x:Static Member="vm2:CoreServiceLogView.CoreServiceLogViewCollection"
x:Key="CoreServiceCollection" />
</ResourceDictionary>
EDIT 3 (Stil... )
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<!-- #columnHeaderDGStyle -->
<!-- Datagrid -->
<Style x:Key="Log4NetDataGridStyle"
TargetType="DataGrid">
<Setter Property="ColumnHeaderStyle"
Value="{DynamicResource DatagridColumnHeaderCustomTemplateStyle}" />
<Setter Property="RowStyle"
Value="{DynamicResource Log4NetRowStyle}" />
<Setter Property="RowDetailsTemplate"
Value="{DynamicResource RowDetailsTemplate}" />
<Setter Property="MaxHeight"
Value="1600">
</Setter>
<Setter Property="MaxWidth"
Value="2560">
</Setter>
</Style>
<Style x:Key="DataCommuGridStyle"
TargetType="DataGrid">
<Setter Property="ColumnHeaderStyle"
Value="{DynamicResource DatagridColumnHeaderCustomTemplateStyle}" />
<Setter Property="RowStyle"
Value="{DynamicResource CommuRowStyle}" />
<Setter Property="RowDetailsTemplate"
Value="{DynamicResource RowDetailsTemplate}" />
<Setter Property="MaxHeight"
Value="1600">
</Setter>
<Setter Property="MaxWidth"
Value="2560">
</Setter>
</Style>
<!-- ************************* Row Style ************************* -->
<Style x:Key="Log4NetRowStyle"
TargetType="DataGridRow">
<Setter Property="FontSize"
Value="14" />
<Setter Property="Background"
Value="{Binding Path=LogColour.ColorName}" />
<Setter Property="Height"
Value="Auto">
</Setter>
<Style.Triggers>
<DataTrigger></DataTrigger>
</Style.Triggers>
</Style>
<Style x:Key="CommuRowStyle"
TargetType="DataGridRow">
<Setter Property="FontSize"
Value="14" />
<Setter Property="Background"
Value="Azure" />
<Setter Property="Height"
Value="Auto">
</Setter>
<Style.Triggers>
<DataTrigger></DataTrigger>
</Style.Triggers>
</Style>
<DataTemplate x:Key="RowDetailsTemplate">
<Border BorderThickness="0"
Padding="5" >
<Border.Background>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1" Opacity="0.2">
<GradientStop Color="White"
Offset="0" />
<GradientStop Color="Black"
Offset="1" />
</LinearGradientBrush>
</Border.Background>
<!-- alternative with Expancer -->
<Expander IsExpanded="True"
HorizontalAlignment="Left"
BorderThickness="1,1,1,5"
MaxHeight="300"
MaxWidth="900">
<Expander.Header>
<DockPanel>
<TextBlock FontSize="12"
Text="LoggingMessage: "
VerticalAlignment="Center" />
</DockPanel>
</Expander.Header>
<Expander.Content>
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto"
CanContentScroll="True"
Style="{StaticResource LeftScrollViewer}">
<StackPanel Orientation="Vertical">
<TextBox FontSize="16"
BorderThickness="0"
IsReadOnly="True"
Background="Transparent"
Foreground="Black"
TextWrapping="Wrap"
Text="{Binding LoggingMessage, Mode=OneWay}" />
</StackPanel>
</ScrollViewer>
</Expander.Content>
</Expander>
</Border>
</DataTemplate>
<Style x:Key="GroupHeaderStyle"
TargetType="{x:Type GroupItem}">
<Setter Property="Margin"
Value="0,0,0,5" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander IsExpanded="False"
Background="#FF112255"
BorderBrush="#FF002255"
Foreground="Black"
BorderThickness="1,1,1,5">
<Expander.Header>
<DockPanel>
<TextBlock FontWeight="Bold"
Foreground="White"
Text="{Binding Path=Name}"
Margin="5,0,0,0"
Width="100" />
<TextBlock FontWeight="Bold"
Foreground="White"
Text="{Binding Path=ItemCount}" />
</DockPanel>
</Expander.Header>
<Expander.Content>
<ItemsPresenter />
</Expander.Content>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ******************** DataTemplate ******************** -->
</ResourceDictionary>
- kannst du bitte posten, was Sie in CoreServiceCollection?
- Kann ich mehr Hochladen, aber ich glaube nicht, dass das problem in der Sammlung
- also, wo tun, erstellen Sie eine Instanz von CoreServiceLogViewCollection ? Ist es instanziiert innerhalb des XAML-Ressourcen oder es wurde an den datacontext?
- Sieht aus wie das problem, wie die Sammlung gebunden ist, mit datagrid. So ist es schwer zu sagen, bis Sie nach dem code.
- sieht aus wie es ist etwas falsch mit Stil
- Ich schrieb eine Antwort eine Weile zurück, um wie zu Lesen WPF binding-Fehler. Es sieht aus wie Ihre Fehler zu sagen, Sie haben ein problem-Bindung
DataGridDetailsPresenter.SelectiveScrollingOrientation
undDataGridRowHeader.Visibility
, aber ich sehe nicht, dass in der XAML-code an einer beliebigen Stelle. Können Sie Ihre volle DataGrid-code? Oder wenn Sie benutzerdefinierte Formatvorlagen für die Teile der Daten-grid -, post-diejenigen, die als gut. - Ich sehe keine problem in dem code. Versuchen Sie alle Stile auf "gridview" und wenn es baut, dann überprüfen Sie den code des datagrid-Stil.
- Ich habe den upload der Stil, wenn Sie Zeit haben, zu betrachten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schrieb ich eine Antwort eine Weile zurück, um wie zu Lesen WPF binding-Fehler. Im Grunde brechen Sie Ihre Fehler auf dem semi-colons und beginnen, es zu Lesen von unten nach oben, und es sollte Ihnen eine Vorstellung, wo die Bindung Fehler:
und
Lesen von unten nach oben, der erste Fehler ist Ihnen zu sagen
SelectiveScrollingOrientation
DataGridDetailsPresenter
mit no name angegebeneDataContext
hinter der UI-Objekt istnull
RelativeSource
TypDataGrid
so binden kann, um dieAreRowDetailsFrozen
Eigentum, und die seinen nicht zu finden, dassRelativeSource
Also schauen Sie durch Ihren code für so etwas wie dieses:
Der zweite Fehler ist, erzählen Sie
Visibility
DataGridRowHeader
mit no name angegebeneDataContext
hinter der UI-Objekt istnull
RelativeSource
TypDataGrid
so binden kann, um dieHeadersVisibility
Eigentum, und die seinen nicht zu finden, dassRelativeSource
Also schauen Sie durch Ihren code für so etwas wie dieses:
Basiert auf dem code, den Sie geschrieben, die erste in Ihrem
LeftScrollViewer
Stil irgendwo, und der 2. ist wahrscheinlich in IhremDatagridColumnHeaderCustomTemplateStyle
Wenn Sie Probleme haben, Auffinden der Fehler im XAML-Code, können Sie versuchen, Ihre Anwendung und prüfen Sie es mit einem tool wie Snoop, mit denen Sie Blick auf den VisualTree einer WPF-Anwendung, während es läuft, und Sie sollten in der Lage sein die exakte, verbindliche Fehler gibt, so können Sie verfolgen es zurück zu der Quelle in Ihrem XAML -
Dieser Fehler tritt in der ControlTemplate für die DataGridRow, die enthält eine DataGridRowHeader und ein DataGridDetailsPresenter mit den Bindungen, die oben erwähnt. Ich habe das gleiche Problem für die .NET 4.5 DataGrid. Es scheint, dass beide Fehler nur tritt auf, wenn das DataGrid-Steuerelement mithilfe der Virtualisierung für die it-items sind, können Sie versuchen, deaktivieren Sie es in Ihrem DataGrid. Meiner Meinung nach passiert es, wenn ein DataGridRow ist irgendwie attached/detached from it ' s DataGrid während die Virtualisierung und die Bindung dann verliert oder noch nicht finden, die relativ verbindliche Ziele für die DataGrid-Komponente.