StringFormat XAML绑定到多个控件

时间:2016-06-21 11:40:17

标签: c# .net wpf xaml binding

我有自定义Button类型,我无法更改代码。此Button有一个名为MyArguments的属性,它接受一串以分号分隔的值。

我在屏幕上有一堆TextBox,供用户输入一些信息。

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

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

如果只有一个TextBox,我可以像这样使用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中完成此操作。没有代码。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您忘记将名称空间前缀(例如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>

答案 1 :(得分:0)

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

e.g。

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

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