Benutzer mit den meisten Antworten
XAML: zwei verschiedene Propertys eines Textblocks an zwei verschiedene Bindings hängen

Frage
-
Hallo,
wieder einmal stehe ich ein Problem!
Ich habe folgendes XAML:
<Page.Resources> <CollectionViewSource x:Name="CVS_2"/> <DataTemplate x:Key="DataTemplateList"> <Grid> <TextBlock Grid.Column="1" Text="{Binding text}" TextWrapping="Wrap" FontSize="17"/> </Grid> </DataTemplate> </Page.Resources> [...] <Grid> <ListBox ItemsSource="{Binding Source={StaticResource CVS_2}}" ItemTemplate="{StaticResource DataTemplateList}"/> </Grid>
Ich würde will die FontSize des TextBlocks im DataTemplate auch gerne an ein Binding hängen, allerdings eine andere als die ItemSource der ListBox!
Wie mache ich das? Habe jetzt schon wieder lange rumprobiert, kriege es aber nicht hin!
Die CVS_2 wird von ja von einer List<T> o.ä. gefüttert, jetzt muss ich nur noch wissen wie ich das FontSize mit einem INT Binden kann...
Danke!!!
Antworten
-
Hallo,
welche Technologie verwendest du denn? XAML hat eklatante Unterschiede bei den verschiedenen Plattformen was die Bindings betrifft. Ich brate mal auf Basis deine anderen Fragen und sage das du eine Windows Store App nutzt.Wenn ich dich richtig verstanden habe, willst du aus dem DataTemplate heraus an eine Eigenschaft binden, die nicht im Scope des Items innerhalb der ListBox liegt.
Wenn du beispielsweise die FontSize an einen Slider binden willst, ist es am einfachstem diesme einen Namen zu geben. Die API löst den Verweis auf "slider" zur Laufzeit richtig auf.
<TextBlock Text="{Binding }" FontSize="{Binding Value, ElementName=slider}"/>
Außerhalb des Templates:<Slider HorizontalAlignment="Left" Margin="63,30,0,0" VerticalAlignment="Top" Width="809" Name="slider" Minimum="10" MaxHeight="100"/>
In WPF könntest du mittels RelativeSource auch auf höhere Elemente zugreifen. Also beispielsweise auf die Page oder das Fenster. Somit wäre ein binden an Eigenschaften des zu Grunde liegenden ViewModels auch kein Problem.
Das geht in den Apps nicht mehr so einfach. Hier wird scheinbar ein Pseudo-Element benötigt. Siehe hier. Allgemein ist es aber auch unüblich aus einem Template heraus an höhere DataContexts zu binden.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert PHep Dienstag, 24. März 2015 00:00
Alle Antworten
-
Hallo,
welche Technologie verwendest du denn? XAML hat eklatante Unterschiede bei den verschiedenen Plattformen was die Bindings betrifft. Ich brate mal auf Basis deine anderen Fragen und sage das du eine Windows Store App nutzt.Wenn ich dich richtig verstanden habe, willst du aus dem DataTemplate heraus an eine Eigenschaft binden, die nicht im Scope des Items innerhalb der ListBox liegt.
Wenn du beispielsweise die FontSize an einen Slider binden willst, ist es am einfachstem diesme einen Namen zu geben. Die API löst den Verweis auf "slider" zur Laufzeit richtig auf.
<TextBlock Text="{Binding }" FontSize="{Binding Value, ElementName=slider}"/>
Außerhalb des Templates:<Slider HorizontalAlignment="Left" Margin="63,30,0,0" VerticalAlignment="Top" Width="809" Name="slider" Minimum="10" MaxHeight="100"/>
In WPF könntest du mittels RelativeSource auch auf höhere Elemente zugreifen. Also beispielsweise auf die Page oder das Fenster. Somit wäre ein binden an Eigenschaften des zu Grunde liegenden ViewModels auch kein Problem.
Das geht in den Apps nicht mehr so einfach. Hier wird scheinbar ein Pseudo-Element benötigt. Siehe hier. Allgemein ist es aber auch unüblich aus einem Template heraus an höhere DataContexts zu binden.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert PHep Dienstag, 24. März 2015 00:00