2016-06-21 16 views
0

Ich habe eine benutzerdefinierte Button Art und ich kann den Code nicht ändern. Diese Schaltfläche hat eine Eigenschaft namens MyArguments, die eine Zeichenfolge aus durch Semikolon getrennten Werten akzeptiert.StringFormat XAML Bindung an mehrere Steuerelemente

Ich habe eine Reihe von TextBoxen auf dem Bildschirm für den Benutzer, um einige Informationen einzugeben.

Ich möchte, dass meine Schaltfläche diese drei Werte übernimmt und sie an die Stringeigenschaft MyArguments liefert.

Wenn es nur eine einzige TextBox war ich die String Option wie diese verwenden:

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

jedoch nicht mehrere Kontrollen mit String verwenden können.

Ich versuchte mit MultiBinding, aber die MyArguments-Eigenschaft gibt einen Fehler '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> 

Ich brauche das in reinem XAML getan. Kein Code dahinter.

Irgendwelche Ideen?

+0

Welche Art von Fehler ist das? Kompiliert es? Laufzeitfehler? –

+0

@Dennis: Nicht, wenn Sie 'StringFormat' verwenden. –

+0

@H.B. Ein Kompilierungsfehler. – CathalMF

Antwort

2

Sie haben vergessen, das Namespacepräfix (z local) auf die Eigenschaft hinzuzufügen:

<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> 
0

Das klingt, als ob der Parser die Element-Syntax-Eigenschaft nicht mit Ihrer Element-Instanz verknüpfen kann. I.e. Es wird angenommen, dass Sie eine angefügte Eigenschaft definieren, obwohl sie eine Instanzeigenschaft sein soll.

z.B.

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

Verweisen Sie auf den gleichen Typ? Es sieht auch seltsam aus, wie Sie kein Präfix auf Ihrer Schaltfläche haben, oder hat jemand tatsächlich das System missbraucht und die Assembly kompiliert, um den WPF-Namespace zu verwenden?

Verwandte Themen