DataGridTemplateColumn未绑定ItemSource(WPF)中的对象

本文关键字:对象 WPF 绑定 ItemSource DataGridTemplateColumn | 更新日期: 2023-09-27 18:03:49

我创建的对象类型是Message,而不是列表TableDataGrid_ItemSource = new ObservableCollection<Message>()。以前我只有DataGridTextColumn列,它们都绑定了正确类型的对象Message。

<DataGridTextColumn Header="Type" Binding="{Binding MessageCategoryID.Type}" Width="*"/>
<DataGridTextColumn Header="Full text" Binding="{Binding FullTextMessage}" Width="*"/> 

现在,我想通过添加一个文本和一个图像来自定义列,这两种类型都是Message对象。

<DataGridTemplateColumn Header="Message ID">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Label Content="{Binding MessageID, Mode=OneWayToSource}" Width="*" Visibility="Visible"/>
                <Image Source="{Binding Image}" HorizontalAlignment="Left" Width="20" Height="20"></Image>
            </StackPanel>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

当我运行时,我得到这个错误:

类型为的未处理异常中发生"System.Windows.Markup.XamlParseException"PresentationFramework.dll

附加信息:在上提供价值"System.Windows.Baml2006.TypeConverterMarkupExtension"引发了例外

DataGridTemplateColumn未绑定ItemSource(WPF)中的对象

<Label  Width="*"

这就是你麻烦的根源。Width="*"-仅适用于列和行。拆下它。如果要拉伸LabelImage,请将StackPanel替换为网格。StackPanel使其子代的大小最小化。