如何从 DataGrid 中的数据模板绑定到控件引用
本文关键字:绑定 控件 引用 数据 DataGrid | 更新日期: 2023-09-27 17:55:20
我没有使用基于MVVM或PRISM的模型。我正在尝试在 DataGrid DataTemplate 中绑定到与我的 DataGrid 位于同一级别的控件。当我这样做时,我返回为空。
2 问题:
-
什么是 LayoutRoot?当我引用它(在本例中为网格)时,我返回了一个对象。如果我在 XAML 中将布局根更改为画布,则返回 null。
-
如何在数据网格列的数据模板中绑定到 XAML 中的画布?
我有以下 XAML:(由于长度而修剪)
<Grid x:Name="LayoutRoot" Background="#F7F7F7">
<Border>
<Canvas x:Name="LayoutCanvas">
<!-- A lot of Xaml -->
</Canvas>
</Border>
</Grid>
在我的画布中,我有以下数据网格:
<sdk:DataGrid x:Name="dgOrderContents" AutoGenerateColumns="False">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Thumb">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ucp:PhotoComponentForDataGrid Source="{Binding PhotoUrl}" PopupTarget="{Binding ElementName='LayoutCanvas' }" Width="60" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn
</sdk:DataGrid.Columns>
</sdk:DataGrid>
我的问题是当我尝试使用"LayoutCanvas"绑定时,该值为 null,从而导致错误。如果我绑定到"LayoutRoot",它可以工作,除了我需要画布,因为位于我的用户控件中的 FloatableWindow 控件依赖于画布。
提前感谢您的任何帮助或建议。
我可能无法使绑定工作,因为我没有使用 MVVM 或 PRISM 模型。但我确实通过使用我的 DataGrid 的 LoadRow 事件让它工作。
private void dgOrderContents_LoadingRow(object sender, DataGridRowEventArgs e)
{
foreach (DataGridColumn col in dgOrderContents.Columns)
{
if (col.Header.ToString() == "Thumb")
{
PhotoComponentForDataGrid pcdControl = (PhotoComponentForDataGrid)col.GetCellContent(e.Row);
pcdControl.PopupTarget= this.LayoutCanvas;
}
}
}
这允许我从自定义用户控件引用 LayoutCanvas 控件。