我是 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 次(如上图所示),它们都会以一种特定的格式显示名称。(即在 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 ...
但我不希望这样,'因为它真的会使我的代码过于庞大,最重要的是它会使资源可重用性的概念无效!
请建议我任何可能的解决方案。
提前致谢。
注意:我从这里得到了最初的想法。可以在 msdn.microsoft.com/en-us/library/ms771336.aspx 找到类似的工作示例。
标签: wpf xaml 静态资源 动态资源绑定