【发布时间】:2014-12-26 12:00:13
【问题描述】:
尝试在DataGrid 中使用分组并且无缘无故地得到那些绑定错误(它们不属于我的代码,我也看不到处理它们的方法):
System.Windows.Data 错误:4:找不到与引用'RelativeSource FindAncestor,AncestorType='System.Windows.Controls.DataGrid',AncestorLevel='1''的绑定源。绑定表达式:路径=AreRowDetailsFrozen;数据项=空;目标元素是'DataGridDetailsPresenter'(名称='');目标属性是“SelectiveScrollingOrientation”(输入“SelectiveScrollingOrientation”)
和
System.Windows.Data 错误:4:找不到与引用'RelativeSource FindAncestor,AncestorType='System.Windows.Controls.DataGrid',AncestorLevel='1''的绑定源。 BindingExpression:Path=HeadersVisibility;数据项=空;目标元素是'DataGridRowHeader'(名称='');目标属性是“可见性”(类型“可见性”)
它们出现在DataGrid 中的每一行。这让我很烦恼!
为了重现这个问题我做了一个小项目
public class MyItem
{
public string A { get; set; }
}
public class ViewModel
{
public List<MyItem> List { get; set; }
public ViewModel()
{
List = new List<MyItem>(new[] { new MyItem() });
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
}
xaml
<DataGrid ItemsSource="{Binding List}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding A}" Header="A"/>
</DataGrid.Columns>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="GroupItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GroupItem">
<!-- anything or nothing here -->
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
</DataGrid>
一些观察:
- 没有
DataGrid.GroupStyle就没有错误; -
AutoGenerateColumns = true没有错误; - 不绑定(直接设置
DataGrid.ItemsSource)没有错误。
只有与这 3 个条件相反的组合才会开始向Output 窗口发送带有上述消息的垃圾邮件。
我该怎么办?我不能忽略错误,也找不到修复它们的方法。
谷歌搜索并没有真正的帮助,例如,this case 被称为错误,我尝试应用它的解决方法,但没有一个对我有用。
P.S.:第一次尝试使用 DataGrid 时发现此类错误非常令人沮丧。
尝试处理第二个错误。
<DataGrid.RowHeaderStyle>
<Style TargetType="DataGridRowHeader">
<Setter Property="Visibility" Value="Collapsed"/>
<Setter Property="Template" Value="{x:Null}"/>
</Style>
</DataGrid.RowHeaderStyle>
但错误仍然存在
System.Windows.Data 错误:4:找不到与引用'RelativeSource FindAncestor,AncestorType='System.Windows.Controls.DataGrid',AncestorLevel='1''的绑定源。 BindingExpression:Path=HeadersVisibility;数据项=空;目标元素是'DataGridRowHeader'(名称='');目标属性是“可见性”(类型“可见性”)
【问题讨论】: