WPF如何将图像作为ItemsSource的属性绑定到DataGrid列?

时间:2015-08-19 18:06:25

标签: c# wpf xaml mvvm datagrid

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

我有一个包含4列的DataGrid,我希望最后一列是图像列。其他3个文本列绑定到列表AttributeNode中包含的Attributes的属性,该列表用作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&amp; 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绑定执行此操作,那么我会收到此错误:

enter image description here

问题

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

1 个答案:

答案 0 :(得分:0)

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

看来这是一个Resharper问题,并且像这样创建一个新的?

Attribute

即使Resharper声称它无法找到new Attribute("","","","../Icons/checkmark.png") 属性,也能正常工作。在运行时正确设置DataContext。图像现在显示在列中。