【发布时间】:2019-05-01 21:22:24
【问题描述】:
我有一个 MVVM WPF 应用程序。此应用程序有两个数据网格。
其中一个具有 DataGridTemplateColumn 等。当我重新加载 UI 时,此 DataGridTemplateColumn 导致异常。在错误的屏幕截图下方(注意:如果我删除了这个 DataGridTemplateColumn 则一切正常,不会引发异常):
它是西班牙语的。英文是:“指定元素已经是另一个元素的逻辑子元素。先断开它”
我检测到罪魁祸首是当我通过这样做定义 DataGridTemplateColumn 的标题时:
<dg:DataGridTemplateColumn.Header>
<StackPanel Orientation="Horizontal" >
<Image RenderOptions.BitmapScalingMode="NearestNeighbor"
Width="32" Height="32"
Source="/My.Utilities.Resources;component/Images/MyIcon.png"/>
<TextBlock Text="Show PDF" VerticalAlignment="Center"/>
</StackPanel>
</dg:DataGridTemplateColumn.Header>
如果我删除上面的 DataGridTemplateColumn.Header 部分,那么它可以工作并且不会引发异常。为什么?如何解决?
通过将项目列表分配给 ItemsSource 数据网格属性来初始化 DataGrid。
DataGrid 资源是:
<!-- DataGrid Resources -->
<dg:DataGrid.Resources>
<proxy:BindingProxy x:Key="myProxy" Data="{Binding}" />
</dg:DataGrid.Resources>
而代理类是:
public class BindingProxy : Freezable
{
#region Overrides of Freezable
protected override Freezable CreateInstanceCore()
{
return new BindingProxy();
}
#endregion
public object Data
{
get { return (object)GetValue(DataProperty); }
set { SetValue(DataProperty, value); }
}
// Using a DependencyProperty as the backing store for Data. This enables animation, styling, binding, etc...
public static readonly DependencyProperty DataProperty =
DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null));
}
DataGridTemplateColumn 如下所示。基本上它包含一个链接,当单击该链接时,它会调用带有参数的命令。该参数为同一datagrid的另一列包含的pdf文件名:
<dg:DataGridTemplateColumn MinWidth="100" Width="auto">
<dg:DataGridTemplateColumn.Header>
<StackPanel Orientation="Horizontal" >
<Image RenderOptions.BitmapScalingMode="NearestNeighbor"
Width="32" Height="32"
Source="/My.Utilities.Resources;component/Images/MyIcon.png"/>
<TextBlock Text="Show PDF" VerticalAlignment="Center"/>
</StackPanel>
</dg:DataGridTemplateColumn.Header>
<dg:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center">
<Hyperlink Command="{Binding Path=Data.ShowPdf, Source={StaticResource myProxy}}"
CommandParameter="{Binding Path=FileName}" >
Show PDF
</Hyperlink>
</TextBlock>
</DataTemplate>
</dg:DataGridTemplateColumn.CellTemplate>
</dg:DataGridTemplateColumn>
【问题讨论】:
标签: c# wpf mvvm visual-studio-2008 .net-3.5