この回答を見つけることができませんでした。WPF - プログラムで追加されたGridViewColumnsのDataTemplateを設定します
私はさまざまな数の列を含むことができるWPF ListViewコントロールを持っています。たとえば、ID、名前、価格、NumberInStock、Manufacturerを表示する商品を含むことができる、顧客データを表示したり、列ID、名前、電子メールなどを表示することができます。
私がやりたいことは、特定の列でデータを別々に表示することです。たとえば、NumberInStock列の値として「Yes」または「No」を印刷する代わりに、きれいなイメージを表示したいとします。
バインドする固定名の固定量のカラムを使用すると、これは簡単なことです。その特定の列の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);
}
は[OK]を、私は(!あなたが何かアドバイスを持っている場合、してください)これは少しきれいに行うことができると確信しているが、最大の問題は、私はすべてのを見ることができないということです列の違い。 '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本当に。私はリストビューでイメージと赤い枠線を見てうれしいです!事前に
おかげで、 Razzie
ありがとうございます、それは本当に問題のように見えます。 SP1に付属のDataGridコントロールを使用するために、自分のコードを編集しました。とにかく私の状況に適しています。しかし、これは間違いなく正しいソリューションです。どうもありがとう! – Razzie