Laden...

DataGrid Colum nach Type

Erstellt von nilres vor 13 Jahren Letzter Beitrag vor 13 Jahren 776 Views
N
nilres Themenstarter:in
60 Beiträge seit 2010
vor 13 Jahren
DataGrid Colum nach Type

Hallo Leute,

folgendes Problem: Ich möchte Daten nach dem Schema (vereinfacht Dargestellt (kein INotifyPropertyChanged...)):


public class DummyData {
	public String Name {
		set;
		get;
	}
	public Object Value {
		set;
		get;
	}
}

Diese befinden sich in einer ObservableCollection im ViewModel. Daran binde ich nun mein DataGrid:


<DataGridItemsSource="{Binding Path=DummyDatas}" AutoGenerateColumns="False">

Den namen Darszustellen war natürlich ganz einfach:


    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}" />

Problem ist jetzt das Value-Objekt. Dieses kann entweder ein String, eine Zahl oder oder ein von mir definiertes Objekt. Der String soll in einem einfachen TextBlock dargestellt werden. Die Zahl hätte ich gerne als TextBlock und einem Button (Zusammen in einem StackPanel oder ähnliches) und meine eigene Klasse eben so als TextBlock plus zusätzlichem Button.

Dafür brauche ich bestimmt DataGridTemplateColumn-Element nur irgendwie komme ich mit meinen DataTemplates da nicht weiter. So sieht das momentan aus:


<DataGridTemplateColumn Header="Value">
	<DataGridTemplateColumn.CellTemplate>
		<DataTemplate>
			<DataTemplate.Resources>
				<DataTemplate DataType="{x:Type WpfApplication2:Dummy}">
					<StackPanel>
						<TextBlock Text="{Binding Value}" />
						<Button />
					</StackPanel>
				</DataTemplate>
				<DataTemplate DataType="{x:Type System:Int32}">
					<StackPanel>
						<TextBlock Text="{Binding Value}" />
						<Button />
					</StackPanel>
				</DataTemplate>
				<DataTemplate DataType="{x:Type System:String}">
					<TextBlock Text="{Binding Value}" />
				</DataTemplate>
			</DataTemplate.Resources>
			<ContentPresenter />
		</DataTemplate>
	</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Jetzt weiß ich einfach nicht wie ich das mit einem Control enstprechend darstellen kann...

Ich hoffe jemand kann mir helfen.

Grüße
Nils

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo nilres,

dafür kannst du auch einfach einen DataTemplateSelector verwenden.
Damit bist du IMHO am flexibelsten.

Hier ein Beispiel: How to use a DataTemplateSelector

Gruss
Michael

N
nilres Themenstarter:in
60 Beiträge seit 2010
vor 13 Jahren

Ah vielen Dank ich denke damit geht das wirklich gut.

Grüße
Nils