none
XAML: zwei verschiedene Propertys eines Textblocks an zwei verschiedene Bindings hängen RRS feed

  • 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!!!

    Montag, 23. März 2015 22:24

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
    Montag, 23. März 2015 23:16
    Moderator

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
    Montag, 23. März 2015 23:16
    Moderator
  • Ja, das habe ich vergessen zu schreiben, ich nutzte WinRT!

    Okay, ja so einfach kanns gehen, hätte ich auch selber drauf kommen können... ;-)

    Danke dir!

    Dienstag, 24. März 2015 00:00