【问题标题】:WPF How to Bind an Image to a DataGrid column as a property of the ItemsSource?WPF 如何将图像绑定到 DataGrid 列作为 ItemsSource 的属性?
【发布时间】:2015-11-13 04:07:17
【问题描述】:

我正在使用 MVVM 设计模式创建一个 WPF 应用程序。

我有一个包含 4 列的 DataGrid,我希望最后一列是图像列。其他 3 个文本列绑定到列表 Attributes 中包含的 AttributeNode 的属性,该列表用作 ItemsSource

XAML

<UserControl.DataContext>
    <viewModel:AttributeGridViewModel />
</UserControl.DataContext>     

...

<DataGrid Name="AttributeGrid" HorizontalAlignment="Stretch" 
                VerticalAlignment="Stretch" ItemsSource="{Binding Attributes}" 
                AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Parameter" Binding="{Binding Parameter}"
                            MinWidth="30" Width="225" FontSize="15"/>
        <DataGridTextColumn Header="Value" Binding="{Binding Value}"
                            MinWidth="30" Width="*" FontSize="15"/>
        <DataGridTextColumn Header="IP Address" Binding="{Binding IpAddress}"
                            MinWidth="10" Width="120" FontSize="15"/>
        <DataGridTemplateColumn Header="Conflict" Width="50">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <!-- area of confusion -->
                    <Image Source="{Binding ???}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
   </DataGrid.Columns>
</DataGrid>

AttributeGridViewModel & AttributeNode

在我的AttributeGridViewModel 中,我使用这样的一行设置属性:

Attributes = ConfigUtility.GetAttributeNodes(value);

下面是AttributeNode 类的一部分:

public class AttributeNode
{
    public string Parameter { get; set; }
    public string Value { get; set; }
    public string IpAddress { get; set; }
    public string ImageSource {get; set; }
    public char Type { get; set; }

    ...
}

您可以在此处查看属性以及我如何将 Parameter、Value 和 IpAddress 属性附加到它们自己的列。

但如果我尝试使用 Image Source 绑定执行此操作,则会收到此错误:

问题

我还不确定是否可以绑定到表示图像路径的字符串,但我想更重要的是如何访问属性 ImageSource 并将数据绑定到属性 AttributeNode 中的 AttributeNode 类型的项目DataGrid 的 ItemsSource AttributesAttributes 列表)?我的实现适用于其他 3 列,并根据我的 ViewModel 中的更改正确更新。如何像以前一样访问该属性?

【问题讨论】:

  • 只是猜测:如果您将 DataTemplate 定义为静态资源,如 DataGridTemplateColumn 的 MSDN 示例中所示,是否有帮助? msdn.microsoft.com/en-us/library/…
  • @DaveMackersie 我得到了和以前一样的错误。

标签: c# wpf xaml mvvm datagrid


【解决方案1】:

对于任何想知道我如何解决此问题的人...

这似乎是一个 Resharper 问题,并像这样创建一个新的Attribute

new Attribute("","","","../Icons/checkmark.png")

即使 Resharper 声称它找不到 ImageSource 属性也可以工作。 DataContext 在运行时设置正确。图像现在显示在列中。

【讨论】:

    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2011-12-17
    • 2011-10-25
    • 2015-11-22
    相关资源
    最近更新 更多