【发布时间】: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 Attributes(Attributes 列表)?我的实现适用于其他 3 列,并根据我的 ViewModel 中的更改正确更新。如何像以前一样访问该属性?
【问题讨论】:
-
只是猜测:如果您将 DataTemplate 定义为静态资源,如 DataGridTemplateColumn 的 MSDN 示例中所示,是否有帮助? msdn.microsoft.com/en-us/library/…
-
@DaveMackersie 我得到了和以前一样的错误。