Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Visibility erst nach einem Converter setzen
p!lle
myCSharp.de - Member

Avatar #avatar-3556.jpg


Dabei seit:
Beiträge: 1050

Themenstarter:

Visibility erst nach einem Converter setzen

beantworten | zitieren | melden

Moin,

stehe derzeit vor einem (wahrscheinlich) kleinen Problem, zu dem mir partout keine Lösung einfällt (bzw. keine Schlagwörter für Google einfallen).

Normalerweise kann man über ein Bindung bzw. ein Markup (mit Konstruktorparameter) ja total einfach eine Visibility setzen:
<TabItem Visibility="{Binding MeineTolleProperty}"
<TabItem Visibility="{MeineTolleMarkupExtension MeinTollerKonstrParam}"

Nun benötige ich aber für das Binding/das Markup einen Converter, den ich in den Ressourcen des TabItem definiere, dadurch kann ich erst später im XAML die Visibility setzen:
<TabItem>
    <TabItem.Visibility>
        ???
    </TabItem.Visibility>
</TabItem>

Für ein Binding lässt sich die Stelle mit den "?" leicht füllen, wie aber macht man es bei einem Markup mit Konstruktorparametern?
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1411
Herkunft: NRW

beantworten | zitieren | melden

Verstehe ich dich richtig, dass Du das Ergebnis von deiner MarkupExtension durch einen Converter jagen willst?

Also analog zu:
{Binding MeineTolleProperty, Converter={MeinTollerConverter}}
Soll es heißen:
{MeineTolleMarkupExtension MeinTollerKonstrParam, Converter={MeinTollerConverter}}

Mein erster Versuch wäre sowas:
{Binding Source={MeineTolleMarkupExtension MeinTollerKonstrParam}, Converter={MeinTollerConverter}}
Beachte aber:
Du bekommst in keiner Weise (egal ob direkt mit Extension oder als Binding-Source) mit, wenn die MarkupExtension einen anderen Wert liefern wird, da die kein Handling dafür hat.


So ganz ist mir aber auch nicht klar, was das überhaupt bezwecken soll.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Palladin007 am .
private Nachricht | Beiträge des Benutzers
p!lle
myCSharp.de - Member

Avatar #avatar-3556.jpg


Dabei seit:
Beiträge: 1050

Themenstarter:

beantworten | zitieren | melden

Zitat von Palladin007
<TabItem Visibility={MeineTolleMarkupExtension MeinTollerKonstrParam, Converter={MeinTollerConverter}}

Das geht ja ohne Problem, habe das "Visibility" mal ergänzt.
Nur weiß ich eben nicht, wie ich es angebe, wenn ich es eben über
<TabItem>
    <TabItem.Visibility>
        ???
    </TabItem.Visibility>
</TabItem>
setzen muss.

Die MarkupExtension liefert ein bool zurück, entsprechend muss für die Visibility ein Converter dazwischen.
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1411
Herkunft: NRW

beantworten | zitieren | melden

Prinzipiell kannst Du jedes Binding auch ohne MarkupExtension schreiben:
<Binding Source="{MeineTolleMarkupExtension MeinTollerKonstrParam}">
    <Binding.Converter>
        <MeinTollerConverter />
    </Binding.Converter>
</Binding>

Die IntelliSense bietet dir das "Binding" zwar nicht an, geht aber trotzdem.
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5409

beantworten | zitieren | melden

Ich hab mal ein Tutorial verzapft, wo ich derlei Feinheiten der Xaml-Syntax bisserl auf Grund gehe.
Dazu hab ich einfach ein Stück Xaml (fast) ohne jede Syntax-Vereinfachuing formuliert, und anschließend die verschiedenen Vereinfachungen angewendet (Property-Attribute-Syntax, DefaultProperties, Markup-Extensions, TypConverter) - bis schließlich leidlich "normales" Xaml bei rauskommt.
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
p!lle
myCSharp.de - Member

Avatar #avatar-3556.jpg


Dabei seit:
Beiträge: 1050

Themenstarter:

beantworten | zitieren | melden

Moin,

entschuldigt bitte die verspätete Antwort, war die letzten Wochen kaum online.

Im Endeffekt ist es ja dann doch ziemlich einfach, man ist nur irgendwie immer zu verwöhnt von den ganzen Kurzschreibweisen. :tongue:

Also entweder so
<TabItem>
    <TabItem.Visibility>
        <Binding Path="MeineTolleProperty" Converter="{StaticResource meinTollerConverter}" />
    </TabItem.Visibility>
</TabItem>

oder so
<TabItem>
    <TabItem.Visibility>
        <Binding Source="{MeineTolleMarkupExtension MeinTollerKonstrParam}" Converter="{StaticResource meinTollerConverter}" />
    </TabItem.Visibility>
</TabItem>

Die Ausgangsfrage hat sich mittlerweile aber schon wieder erledigt bzw. die Anforderung hat sich geändert, sodass ich das Ganze aktuell doch nicht brauche.
Nichtsdestotrotz wieder etwas dazugelernt.
private Nachricht | Beiträge des Benutzers