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? 🤔
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.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
<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. 😉
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.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
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.
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. 👅
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. 👍