StringFormat XAML绑定到多个控件

问题描述:

我有一个自定义Button类型,我无法更改代码。此按钮有一个名为MyArguments的属性,它接受一串以分号分隔的值。StringFormat XAML绑定到多个控件

我在屏幕上有一堆文本框供用户输入一些信息。

<TextBox Name="TestTextBox1" /> 
<TextBox Name="TestTextBox2" /> 
<TextBox Name="TestTextBox3" /> 

我想让我的Button取这三个值并将它们提供给MyArguments字符串属性。

如果只有一个单一的文本框,我可以使用的StringFormat选项是这样的:

<MyButton MyArguments="{Binding ElementName=TestTextBox1, Path=Text, StringFormat='Arguments;{0}' }/> 

但是你不能使用多个控件使用的StringFormat。

我试过使用MultiBinding,但MyArguments属性给出了一个错误'The attachable property 'MyArguments' was not found in type MyButton'

<MyButton.MyArguments> 
    <MultiBinding StringFormat="Arguments;{0};{1}"> 
     <Binding ElementName="TestTextBox1" Path="Text" /> 
     <Binding ElementName="TestTextBox2" Path="Text" /> 
    </MultiBinding> 
</MyButton.MyArguments> 

我需要在纯XAML中完成此操作。没有代码。

任何想法?

+0

什么样的错误是什么?它是否编译?运行时失败? –

+0

@ Dennis:如果你使用'StringFormat',则不行。 –

+0

@ H.B。编译错误。 – CathalMF

你忘了(例如local)添加命名空间前缀的属性:

<local:MyButton> 
    <local:MyButton.MyArguments> 
     <MultiBinding StringFormat="Arguments;{0};{1}"> 
      <Binding ElementName="TestTextBox1" Path="Text" /> 
      <Binding ElementName="TestTextBox2" Path="Text" /> 
     </MultiBinding> 
    </local:MyButton.MyArguments> 
</local:MyButton> 

这听起来像解析器无法将元素语法属性与您的元素实例相关联。即它认为你正在定义一个附加属性,即使它应该是一个实例属性。

例如

<ListBox ItemsSource="{Binding Data}"> 
    <ListView.ItemTemplate> 
    <!-- Template --> 
    </ListView.ItemTemplate> 
<ListBox> 

您是否引用相同的类型?如何在按钮上没有前缀,或者是否有人实际上滥用系统并编译程序集以使用WPF名称空间,这看起来也很奇怪?