我是wpf和xaml的新手。我通过在这里搜索或在网上搜索找到大多数问题(用其他语言)的解决方案,但这个让我发疯。我在谷歌上搜索了很多并浏览了很多论坛,但似乎这次我遇到了一个真正的挑战!如何在运行时动态更改MultiBinding(或任何其他)资源的ConverterParameter(或任何)属性?
我在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,缩写(有几个,但为了简单起见,我们不考虑它们)
此代码工作正常。我用下面得到的结果:
<TextBlock Text="{DynamicResource CustomerFullNameBinding}"/>
然而,问题是,如果我使用资源CustomerFullNameBinding 20次在我的代码(如abovw所示),他们都将在一个特定的格式显示名称。 (即在这里,在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 ...
,但我不想说,“怎么它会真的让我的代码太笨重,而且最重要的是它会作废资源的可重用性的概念!
请给我建议任何可能的解决方案。
在此先感谢。
注:我从here得到了最初的想法。可以找到类似的工作示例msdn.microsoft.com/en-us/library/ms771336.aspx。
标签:WPF XAML静态资源dynamicresource结合
非常感谢您的快速回复。 你是真的。 ConverterParameter是一个普通属性,而不是一个DependencyProperty。其实我是WPF的新手,有时我也忘记了基本概念!将用户控件绑定到返回结构而不是字符串的动态资源是一个好主意。我没有真的尝试过,但我确定它会工作!再一次感谢你!!! – mg007 2009-08-14 10:58:00