putting multibinding on a single line in xaml
A better (and simpler) approach would be to define a style as a resource which you can easily apply to any TextBox:
<Window.Resources> <c:MyLogicConverter x:Key="LogicConverter" /> <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}" x:Key="MultiBound"> <Setter Property="IsEnabled"> <Setter.Value> <MultiBinding Converter="{StaticResource LogicConverter}"> <Binding ElementName="switch" Path="IsEnabled" /> <Binding ElementName="switch" Path="IsChecked" /> </MultiBinding> </Setter.Value> </Setter> </Style></Window.Resources><StackPanel Orientation="Horizontal"> <CheckBox Name="switch" /> <TextBox Name="textBox2" Text="Test" Style="{StaticResource MultiBound}" /></StackPanel>
This can be done with a custom markup extension:
public class MultiBinding : System.Windows.Data.MultiBinding{ public MultiBinding (BindingBase b1, BindingBase b2) { Bindings.Add(b1); Bindings.Add(b2); } public MultiBinding (BindingBase b1, BindingBase b2, BindingBase b3) { Bindings.Add(b1); Bindings.Add(b2); Bindings.Add(b3); } // Add more constructors if you need.}
Usage:
<TextBox IsEnabled="{local:MultiBinding {Binding IsEnabled, ElementName=prog0_used}, {Binding IsChecked, ElementName=prog0_used}, Converter={StaticResource LogicConverter}}">
For MultiBinding there is no shorthand string. You need to use the expanded element syntax.