我使用MVVM設計模式創建WPF應用程序。WPF如何將圖像綁定到DataGrid列作爲ItemsSource的屬性?
我有一個DataGrid 4列,我想最後一列是一個圖像列。其他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屬性附加到其自己的列。
但是,如果我嘗試用那麼圖像源結合,爲此,我得到這個錯誤:
問題
我還不確定我是否可以綁定到一個代表圖像路徑的字符串,但我想更重要的是如何訪問數據綁定到屬性ImageSource
對於DataGrid的ItemsSource Attributes
(列表Attributes
)中的AttributeNode
類型的項目?我的實現適用於其他3列,並根據ViewModel中的更改正確更新。我如何訪問像我以前那樣的財產?
只是猜測:如果您將DataTemplate定義爲靜態資源,它會有所幫助,如DataGridTemplateColumn的MSDN示例中所示? https://msdn.microsoft.com/en-us/library/system.windows.controls.datagridtemplatecolumn(v=vs.110).aspx –
@DaveMackersie我得到了我以前得到的同樣的錯誤。 – CBrown77