Laden...

CellEditingTemplate TwoWayBind funktioniert nicht

Letzter Beitrag vor 13 Jahren 3 Posts 1.204 Views
CellEditingTemplate TwoWayBind funktioniert nicht

folgendes Problem: Ich habe 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 ein DataGrid:


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

Die Darstellung funktioniert inzwischen sehr gut. Leider gibt es beim Bearbeiten einige Probleme. Mein Value Objekt kann ein String oder ein int sein. Dafür habe ich folgendes CellEditingTemplate:


<DataGridTemplateColumn.CellEditingTemplate>
	<DataTemplate>
		<DataTemplate.Resources>
			<DataTemplate DataType="{x:Type System:String}">
				<TextBox Text="{Binding Path=., Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
			</DataTemplate>
			<DataTemplate DataType="{x:Type System:Int32}">
				<TextBox Text="{Binding Path=., Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
			</DataTemplate>
		</DataTemplate.Resources>
		<ContentPresenter Content="{Binding Path=Value, Mode=TwoWay}" />
	</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

Ich kann die Daten in der TextBox bearbeiten nur wenn dann mit Return bestätige oder der Fokus verloren geht werden die Daten nicht übernommen. Warum? und wie kann ich das ändern?

Wenn man danach sucht findet man einige mit ähnlichen Problemen nur gabs da bisher für mich keine Lösung. Ich verstehe auch nicht wieso mein Code so nicht funktioniert.

Grüße
Nils

Hallo,

ich würde sowieso nicht Object als Typ nehmen 😉
aber hast du mal versucht die Bindung mit einem Converter durchzuführen und dort die beiden Typen (string, int) behandeln?

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Ich habe das Problem gerade noch etwas weiter untersucht. Ich gehe jetzt erst mal nur noch von Strings aus. D.h. ich habe mein Value-Property jetzt zu einem String-Property gemacht. Leider funktioniert folgendes trotzdem nicht:


<DataGridTemplateColumn.CellEditingTemplate>
	<DataTemplate>
		<DataTemplate.Resources>
			<DataTemplate DataType="{x:Type System:String}">
				<TextBox Text="{Binding Path=., Mode=TwoWay}" />
			</DataTemplate>
		</DataTemplate.Resources>
		<ContentPresenter Content="{Binding Path=Value, Mode=TwoWay}" />
	</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

Ich brauche das auf jeden Fall später in in Data-Templates.

Wenn ich anstatt des ContentPresenters bereits eine TextBox einbaue klappt das alles ganz wunderbar. Wieso klappt ein Two-Way-Binding nicht über einen ContenPresenter?

Grüße
Nils