無法找到此答案。WPF - 以編程方式添加GridViewColumns的設置DataTemplate
我有一個WPF ListView控件可以包含不同數量的列。例如,它可以顯示客戶數據,顯示列ID,名稱,電子郵件等,或者它可以包含產品,顯示ID,名稱,價格,編號,股票,製造商,你會得到這樣的想法:不同數量的列,不同的名稱。
我想要做的是爲某些列顯示不同的數據。例如,我不想打印「是」或「否」作爲NumberInStock列的值,我想顯示一個整齊的圖像。
如果我有一個固定數量的列,固定名稱綁定,我有點看到這很容易。只需爲該特定列定義一個DataTemplate,然後使用它來定義列的視圖。但是,我無法看到如何在我的情況下做到這一點。
我很新的WPF,所以原諒我,如果我的做法是不好:-)在我的XAML中,我已經定義了一個ListView控件,這幾乎是空的。在後面我的代碼,我使用:
// get all columns from my objects (which can be either a Customer of Product)
foreach (string columnName in MyObject.Columns)
{
GridViewColumn column = new GridViewColumn();
// Bind to a property of my object
column.DisplayMemberBinding = new Binding("MyObject." + columnName);
column.Header = columnName;
column.Width = 50;
// If the columnname is number of stock, set the template to a specific datatemplate defined in XAML
if (columnName == "NumberInStock")
column.CellTemplate = (DataTemplate)FindResource("numberInStockImageTemplate");
explorerGrid.Columns.Add(column);
}
好吧,我敢肯定,這可以做一個漂亮一點(如果您有任何建議,請!),但最大的問題是,我看不到任何欄中的差異。它只顯示'NumberInStock'列的文本值。我的DataTemplate在XAML定義:
<Window.Resources>
<DataTemplate x:Name="NumberInStock" x:Key="NumberInStock">
<Border BorderBrush="Red" BorderThickness="2.0">
<DockPanel>
<Image Width="24" Height="24" Margin="3,0" Source="..\Images\instock.png" />
</DockPanel>
</Border>
</DataTemplate>
</Window.Resources>
當然,我仍然要補充一點,它會顯示該功能的「是」或「否」的形象取決於NumberInStock的價值,但這是一步2真的。我會很高興在我的ListView中看到圖像和紅色邊框!
由於提前, 金酸莓
謝謝,這看起來確實像這個問題。我已經編輯我的代碼,但要使用SP1附帶的DataGrid控件。無論如何,這可能更適合我的情況。但這絕對是正確的解決方案。非常感謝! – Razzie 2009-02-26 07:54:43