私はwpfとxamlを初めて使用します。ここで検索するか、グーグルで検索することで、ほとんどの問題の解決策を(他の言語で)見つけますが、これは私を夢中にさせました。グーグルでたくさん検索して、たくさんのフォーラムを閲覧しましたが、今回は本当に挑戦したようです!
Window.Resourcesに次のコードがあります。
<my:NameConverter x:Key="NameConverter"/>
<MultiBinding x:Key="CustomerFullNameBinding"
Converter="{StaticResource NameConverter}"
ConverterParameter="LastNameFirst">
<Binding Path="FirstName" />
<Binding Path="MiddleName" />
<Binding Path="LastName" />
</MultiBinding>
NameConverterクラスは、名前の個々の部分を組み合わせてフルネームを返します。戻り値は、 ConverterParameterの値に基づいており、FirstNameFirst、LastNameFirst、OnlyFirstName、OnlyLastName、Initialsのいずれかになります(さらにいくつかありますが、簡単にするために、それらは考慮しません)。
このコードは正常に機能します。結果を得るために以下を使用します:
<TextBlock Text="{DynamicResource CustomerFullNameBinding}"/>
ただし、問題は、コードでリソースCustomerFullNameBindingを20回使用すると(上記のように)、すべてのリソースが1つの特定の形式で名前を表示することです。(つまり、CustomerFullNameBindingの宣言で、ConverterParameter = "LastNameFirst"を設定したので、20個の参照すべてにその方法でのみ名前が表示されます。)
今私の質問は、ConverterParameterの値を動的に設定できるように、それをより「一般化」することができるかということです。つまり、フルネームをさまざまな形式で表示できる複数のテキストブロックを持つことができます。次のように複数のリソースを作成すれば可能だと思います。
<MultiBinding x:Key="CustomerFullNameBinding_FirstNameFirst"
Converter="..." ConverterParameter="FirstNameFirst">
......
</MultiBinding>
<MultiBinding x:Key="CustomerFullNameBinding_LastNameFirst"
Converter="..." ConverterParameter="LastNameFirst">
......
</MultiBinding>
<MultiBinding x:Key="CustomerFullNameBinding_OnlyFirstName"
Converter="..." ConverterParameter="OnlyFirstName">
......
</MultiBinding>
... and so on ...
しかし、私はそれを望んでいません。'cozそれは本当に私のコードをかさばりすぎてしまい、そして最も重要なことに、それはリソースの再利用性の概念を無効にするでしょう!
考えられる解決策を教えてください。
前もって感謝します。
注:私はここから元のアイデアを得ました。同様の作業例は、msdn.microsoft.com / en-us / library/ms771336.aspxにあります。
タグ:wpf xaml staticresource dynamicresourcebinding