myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und XAML » Wie kann ich MaxWidthIdentifier oder PropertiesDataTemplate über RelativeSource binden?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie kann ich MaxWidthIdentifier oder PropertiesDataTemplate über RelativeSource binden?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
d.jonas d.jonas ist männlich
myCSharp.de-Mitglied

Dabei seit: 13.01.2017
Beiträge: 20
Entwicklungsumgebung: VS 2015 Professional
Herkunft: Bayern


d.jonas ist offline

Wie kann ich MaxWidthIdentifier oder PropertiesDataTemplate über RelativeSource binden?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

Ich habe ein Control (ZlsUnitBrowserActive) mit zwei DependencyProperties MaxWidthIdentifier/PropertiesDataTemplate. Wenn ich versuche die beiden properties über "RelativeSource" anzubinden, bekomme ich immer folgende Fehlermeldung:

Fehlermeldung:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='PlcFramework.Zls.Production.ProductionControls.ZlsUnitBrowserActive', AncestorLevel='1''. BindingExpression:Path=PropertiesDataTemplate; DataItem=null; target element is 'DataGridTemplateColumn' (HashCode=30225241); target property is 'CellTemplate' (type 'DataTemplate')

XML-Code:
<Style TargetType="productionControls:ZlsUnitBrowserActive">
    <Style.Setters>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="productionControls:ZlsUnitBrowserActive">
                    <DataGrid>
                        <DataGrid.Columns>
                            <DataGridTemplateColumn>
                                <DataGridTemplateColumn.CellTemplate
                                    MaxWidth="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=productionControls:ZlsUnitBrowserActive}, Path=MaxWidthIdentifier}"
                                    CellTemplate="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=productionControls:ZlsUnitBrowserActive}, Path=PropertiesDataTemplate}"
/>
                            </DataGridTemplateColumn>
                        </DataGrid.Columns>
                    </DataGrid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style.Setters>
</Style>

Nun habe ich bereits die Lösung hier gefunden:  https://www.mycsharp.de/wbb2/thread.php?postid=3787237

XML-Code:
<Style TargetType="productionControls:ZlsUnitBrowserActive">
    <Style.Setters>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="productionControls:ZlsUnitBrowserActive">
                    <DataGrid>
                        <DataGrid.Resources>
                            <xamlHelper:BindingProxy x:Key="DataContextBindingProxy" Data="{Binding RelativeSource={RelativeSource TemplatedParent}}"/>
                        </DataGrid.Resources>
                        <DataGrid.Columns>
                            <DataGridTemplateColumn>
                                <DataGridTemplateColumn.CellTemplate
                                    MaxWidth="{Binding Path=Data.MaxWidthIdentifier, Source={StaticResource DataContextBindingProxy}}"
                                    CellTemplate="{Binding Path=Data.MaxWidthIdentifier, Source={StaticResource PropertiesDataTemplate}"
/>
                            </DataGridTemplateColumn>
                        </DataGrid.Columns>
                    </DataGrid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style.Setters>
</Style>

Kann mir bitte einer eine Erklärung geben warum ich das ganze so lösen muss oder gibt es vielleicht noch eine bessere bzw. elegantere Lösung?

Danke!
Neuer Beitrag 29.01.2020 14:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.383
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich glaube,  TemplateBinding wäre hier die einfachste Möglichkeit.
Neuer Beitrag 29.01.2020 22:05 Beiträge des Benutzers | zu Buddylist hinzufügen
d.jonas d.jonas ist männlich
myCSharp.de-Mitglied

Dabei seit: 13.01.2017
Beiträge: 20
Entwicklungsumgebung: VS 2015 Professional
Herkunft: Bayern

Themenstarter Thema begonnen von d.jonas

d.jonas ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Habe eine Erläuterung gefunden:  https://thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/

Zitat:
The message is rather cryptic, but the meaning is actually quite simple: WPF doesn’t know which FrameworkElement to use to get the DataContext, because the column doesn’t belong to the visual or logical tree of the DataGrid.

Zitat von MrSparkle:
Ich glaube,  TemplateBinding wäre hier die einfachste Möglichkeit.

Das habe ich bereits getestet gehabt.

Thread kann geschlossen werden
Neuer Beitrag 30.01.2020 15:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 4 Monate.
Der letzte Beitrag ist älter als 4 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 04.06.2020 22:47