gpt4 book ai didi

c# - 为什么有时无法解析虚拟化数据网格中的相对绑定(bind)?

转载 作者:行者123 更新时间:2023-11-30 23:31:06 25 4
gpt4 key购买 nike

偶尔从数据网格的单元格中的元素获取绑定(bind)错误。有问题的绑定(bind)有一个相对来源。错误的出现似乎取决于数字列和虚拟化。

我在一个简化的项目中重新创建了一个类似的问题。 (有点做作,但它说明了问题。)

这是它第一次打开时的窗口: Here is the window when it first opens

这是调整大小时的窗口(注意空白单元格): Here is the window when it is resized.  Note the blank cells.

这是 xaml:

<Window x:Class="Test.DataGridVirtualizationBindingTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:test="clr-namespace:Test"
Title="DataGridVirtualizationBindingTest" Height="300" Width="300">

<Window.Resources>
<DataTemplate x:Key="IsReadyTemplate">
<TextBox
Text="{Binding Path=DataContext.IsReady, RelativeSource={RelativeSource AncestorType={x:Type test:DataGridVirtualizationBindingTest}}}"
/>
</DataTemplate>

</Window.Resources>
<Grid>
<DataGrid
ItemsSource="{Binding Records}"
AutoGenerateColumns="False"
ScrollViewer.IsDeferredScrollingEnabled="True"
VirtualizingPanel.IsVirtualizingWhenGrouping="True"
VirtualizingPanel.VirtualizationMode="Recycling"
EnableRowVirtualization="True"
EnableColumnVirtualization="True"
>

<DataGrid.Columns>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
<DataGridTemplateColumn Header="Ready" CellTemplate="{StaticResource IsReadyTemplate}"/>
</DataGrid.Columns>
</DataGrid>

</Grid>
</Window>

窗口的数据上下文是这个类的一个实例:

class DataGridVirtualizationBindingTestVm 
{
public DataGridVirtualizationBindingTestVm()
{
Records = new ObservableCollection<Record>(Enumerable.Range(1, 4000).Select(i => new Record { Field1 = i.ToString() }));

IsReady = true;
}

public ObservableCollection<Record> Records { get; private set; }

public bool IsReady { get; set; }
}

public class Record
{
public string Field1 { get; set; }
}

错误是

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='Test.DataGridVirtualizationBindingTest', AncestorLevel='1''. BindingExpression:Path=DataContext.IsReady; DataItem=null; target element is 'TextBox' (Name=''); target property is 'Text' (type 'String')

它不会发生在每个细胞上。框架是4.5.2。

为什么绑定(bind)有时没有解析?

最佳答案

简单删除

EnableColumnVirtualization="True"

通常你不需要那个(只有当你同时显示几十个列时,但这对用户体验来说不是一件好事——水平滚动很长)而且这似乎是问题所在。

关于c# - 为什么有时无法解析虚拟化数据网格中的相对绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34745847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com