2010-06-02 20 views
13

把multibinding在一行中有沒有辦法把這個multibinding:在XAML

<TextBox.IsEnabled> 
    <MultiBinding Converter="{StaticResource LogicConverter}"> 
     <Binding ElementName="prog0_used" Path="IsEnabled" /> 
     <Binding ElementName="prog0_used" Path="IsChecked" /> 
    </MultiBinding> 
</TextBox.IsEnabled> 

,並把被全部在一行上,如<TextBox IsEnabled="" />

如果是這樣,我在哪裏可以學習此格式的規則?

+0

我不相信這是可能的,但我想知道。 – womp 2010-06-02 17:20:13

+0

將它直接綁定到prog0_used與您的自定義轉換器prog0_used-to-boolean? – 2010-06-02 18:00:51

回答

14

一個更好的(和簡單)的方法是定義一個風格,你可以很容易地應用到任何文本框的資源:

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

對於MultiBinding沒有速記字符串。您需要使用擴展元素語法。

0

這可以用自定義標記擴展來完成:

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. 
} 

用法:

<TextBox IsEnabled="{local:MultiBinding 
    {Binding IsEnabled, ElementName=prog0_used}, 
    {Binding IsChecked, ElementName=prog0_used}, 
    Converter={StaticResource LogicConverter}}"> 
+0

刪除了評論並創建了一個新答案。 – 2015-06-23 05:24:49

1

我試着用不和諧的答案,但它沒有工作的權利開箱。爲了使它工作,我增加了一個新的構造:然後

public class MultiBinding : System.Windows.Data.MultiBinding 
{ 
    public MultiBinding(BindingBase b1, BindingBase b2, object converter) 
    { 
     Bindings.Add(b1); 
     Bindings.Add(b2); 
     Converter = converter as IMultiValueConverter; 
    } 
} 

使用情況將是這樣的:

<TextBox IsEnabled="{local:MultiBinding {Binding IsEnabled, ElementName=prog0_used}, 
{Binding IsChecked, ElementName=prog0_used}, 
{StaticResource LogicConverter}}"> 
+0

我想要做到這一點,因爲我有太多需要對多個布爾值作出反應的控件,但我的行爲不起作用:http://stackoverflow.com/questions/37057720/inline-multibinding-not-working-as-expected – 2016-05-05 20:55:44