AnnaBauer21
Grünschnabel
Hallo ihr Lieben,
ich habe ein kleines Testprojekt geschrieben um mein Problem einfach zu veranschaulichen.
Folgender Ablauf:
XAML
Code Behind
Im Event
Ich hoffe ihr habt eine Idee.
Ich weiß, es entspricht nicht MVVM, aber aktuell versuche ich das so um Laufen zu bringen, muss ja irgendwie gehen
Vielen Dank euch allen
Lieben Gruß
ich habe ein kleines Testprojekt geschrieben um mein Problem einfach zu veranschaulichen.
Folgender Ablauf:
- Ich habe im XAML einen TextBlock mit einem Binding zu einer RelativSource.
- Im CodeBehind werden dann die Inlines des TextBlocks mit Highlighting Informationen erweitet
- Durch DataGrid mit VirtualizingStackPanel.VirtualizationMode="Recycling" ist im Event DataGrid.OnLoadingRow aber auch im Event DataGridRow.Loaded das Ergebnis von GetBindingExpression(TextBlock.TextProperty) null
- Nun habe ich versucht, das Binding neu zu setzen
- Doch das führt dazu, dass der Text im TextBlock mit dem Default-Wert ("") ersetzt wird, statt anhand dem Binding den richtigen Text heranzuziehen.
XAML
XML:
<StackPanel Tag="{Binding Path=MissionName, Converter={StaticResource DebugConverter}}">
<TextBlock
Text="{Binding Path=Tag, RelativeSource={RelativeSource AncestorType=StackPanel}" />
</StackPanel>
Code Behind
C#:
// Daten für Binding merken
var exp = txtBlock.GetBindingExpression(TextBlock.TextProperty);
txtBlock.Tag = new Tuple<RelativeSource, PropertyPath>(exp.ParentBinding.RelativeSource, exp.ParentBinding.Path)
var inlines = new List<Inline>();
inlines.Add(new Run(text.Substring(0, 1)));
inlines.Add(new Run(text.Substring(1, 2))
{
Background = filterData.SelectionColor,
Foreground = filterData.ForegroundColor
});
inlines.Add(new Run(text.Substring(3, 1)));
txtBlock.Inlines.Clear();
txtBlock.Inlines.AddRange(inlines);
Im Event
C#:
var tagData = (Tuple<RelativeSource, PropertyPath>) txtBlock.Tag;
var binding = new Binding { RelativeSource = tagData.Item1, Path = tagData.Item2};
txtBlock.SetBinding(TextBlock.TextProperty, binding); // <- txtBlock.Text ist jetzt ""
// Dieser Aufruf sagt jetzt, IsDirty="true" & Status="Unattached"
var exp = txtBlock.GetBindingExpression(TextBlock.TextProperty);
Ich hoffe ihr habt eine Idee.
Ich weiß, es entspricht nicht MVVM, aber aktuell versuche ich das so um Laufen zu bringen, muss ja irgendwie gehen
Vielen Dank euch allen
Lieben Gruß
Zuletzt bearbeitet: